issue #104: log.reopenFileStreams()
convenience method to be used with external log rotation.
This commit is contained in:
parent
96e2a9b31c
commit
eac13c08cc
5 changed files with 61 additions and 5 deletions
|
@ -6,9 +6,10 @@ Known issues:
|
||||||
bug](https://github.com/TooTallNate/node-gyp/issues/65).
|
bug](https://github.com/TooTallNate/node-gyp/issues/65).
|
||||||
|
|
||||||
|
|
||||||
## bunyan 0.21.5 (not yet released)
|
## bunyan 0.22.0 (not yet released)
|
||||||
|
|
||||||
(nothing yet)
|
- [issue #104] `log.reopenFileStreams()` convenience method to be used with
|
||||||
|
external log rotation.
|
||||||
|
|
||||||
|
|
||||||
## bunyan 0.21.4
|
## bunyan 0.21.4
|
||||||
|
|
17
README.md
17
README.md
|
@ -720,6 +720,23 @@ used for anything else.</td>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
**Note on log rotation**: Often you may be using external log rotation utilities
|
||||||
|
like `logrotate` on Linux or `logadm` on SmartOS/Illumos. In those cases, unless
|
||||||
|
your are ensuring "copy and truncate" sematics (via `copytruncate` with
|
||||||
|
logrotate or `-c` with logadm) then the fd for your 'file' stream will change.
|
||||||
|
You can tell bunyan to reopen the file stream with code like this in your
|
||||||
|
app:
|
||||||
|
|
||||||
|
var log = bunyan.createLogger(...);
|
||||||
|
...
|
||||||
|
process.on('SIGUSR2', function () {
|
||||||
|
log.reopenFileStreams();
|
||||||
|
});
|
||||||
|
|
||||||
|
where you'd configure your log rotation to send SIGUSR2 (or some other signal)
|
||||||
|
to your process. Any other mechanism to signal your app to run
|
||||||
|
`log.reopenFileStreams()` would work as well.
|
||||||
|
|
||||||
|
|
||||||
## stream type: `raw`
|
## stream type: `raw`
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
// See <https://github.com/trentm/node-bunyan>.
|
// See <https://github.com/trentm/node-bunyan>.
|
||||||
//
|
//
|
||||||
|
|
||||||
var VERSION = '0.21.5';
|
var VERSION = '0.22.0';
|
||||||
|
|
||||||
var p = console.log;
|
var p = console.log;
|
||||||
var util = require('util');
|
var util = require('util');
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* The bunyan logging library for node.js.
|
* The bunyan logging library for node.js.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var VERSION = '0.21.5';
|
var VERSION = '0.22.0';
|
||||||
|
|
||||||
// Bunyan log format version. This becomes the 'v' field on all log records.
|
// Bunyan log format version. This becomes the 'v' field on all log records.
|
||||||
// `0` is until I release a version '1.0.0' of node-bunyan. Thereafter,
|
// `0` is until I release a version '1.0.0' of node-bunyan. Thereafter,
|
||||||
|
@ -508,6 +508,44 @@ Logger.prototype.child = function (options, simple) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience method to reopen 'file' streams on a logger. This can be
|
||||||
|
* useful with external log rotation utilities that move and re-open log files
|
||||||
|
* (e.g. logrotate on Linux, logadm on SmartOS/Illumos). Those utilities
|
||||||
|
* typically have rotation options to copy-and-truncate the log file, but
|
||||||
|
* you may not want to use that. An alternative is to do this in your
|
||||||
|
* application:
|
||||||
|
*
|
||||||
|
* var log = bunyan.createLogger(...);
|
||||||
|
* ...
|
||||||
|
* process.on('SIGUSR2', function () {
|
||||||
|
* log.reopenFileStreams();
|
||||||
|
* });
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
* See <https://github.com/trentm/node-bunyan/issues/104>.
|
||||||
|
*/
|
||||||
|
Logger.prototype.reopenFileStreams = function () {
|
||||||
|
var self = this;
|
||||||
|
self.streams.forEach(function (s) {
|
||||||
|
if (s.type === 'file') {
|
||||||
|
if (s.stream) {
|
||||||
|
// Not sure if typically would want this, or more immediate
|
||||||
|
// `s.stream.destroy()`.
|
||||||
|
s.stream.end();
|
||||||
|
s.stream.destroySoon();
|
||||||
|
delete s.stream;
|
||||||
|
}
|
||||||
|
s.stream = fs.createWriteStream(s.path,
|
||||||
|
{flags: 'a', encoding: 'utf8'});
|
||||||
|
s.stream.on('error', function (err) {
|
||||||
|
self.emit('error', err, s);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* BEGIN JSSTYLED */
|
/* BEGIN JSSTYLED */
|
||||||
/**
|
/**
|
||||||
* Close this logger.
|
* Close this logger.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "bunyan",
|
"name": "bunyan",
|
||||||
"version": "0.21.5",
|
"version": "0.22.0",
|
||||||
"description": "a JSON Logger library for node.js services",
|
"description": "a JSON Logger library for node.js services",
|
||||||
"author": "Trent Mick <trentm@gmail.com> (http://trentm.com)",
|
"author": "Trent Mick <trentm@gmail.com> (http://trentm.com)",
|
||||||
"main": "./lib/bunyan.js",
|
"main": "./lib/bunyan.js",
|
||||||
|
|
Loading…
Reference in a new issue