Merge pull request #24 from mhart/support-gzip-files
Added support for Gzip log files: `bunyan foo.log.gz`
This commit is contained in:
commit
98c5bb9173
3 changed files with 43 additions and 2 deletions
13
bin/bunyan
13
bin/bunyan
|
@ -698,7 +698,12 @@ function processStdin(opts, stylize, callback) {
|
|||
* @param callback {Function} `function ()`
|
||||
*/
|
||||
function processFile(file, opts, stylize, callback) {
|
||||
var stream = fs.createReadStream(file, {encoding: 'utf8'});
|
||||
var stream = fs.createReadStream(file);
|
||||
if (/\.gz$/.test(file)) {
|
||||
stream = stream.pipe(require('zlib').createGunzip());
|
||||
}
|
||||
// Manually decode streams - lazy load here as per node/lib/fs.js
|
||||
var decoder = new (require('string_decoder').StringDecoder)('utf8');
|
||||
|
||||
streams[file].stream = stream;
|
||||
|
||||
|
@ -708,7 +713,11 @@ function processFile(file, opts, stylize, callback) {
|
|||
});
|
||||
|
||||
var leftover = ''; // Left-over partial line from last chunk.
|
||||
stream.on('data', function (chunk) {
|
||||
stream.on('data', function (data) {
|
||||
var chunk = decoder.write(data);
|
||||
if (!chunk.length) {
|
||||
return;
|
||||
}
|
||||
var lines = chunk.split(/\r\n|\n/);
|
||||
var length = lines.length;
|
||||
if (length === 1) {
|
||||
|
|
|
@ -168,3 +168,35 @@ test('multiple logs', function (t) {
|
|||
t.end();
|
||||
});
|
||||
});
|
||||
|
||||
test('log1.log.gz', function (t) {
|
||||
exec(BUNYAN + ' corpus/log1.log.gz', function (err, stdout, stderr) {
|
||||
t.error(err);
|
||||
t.equal(stdout, [
|
||||
'[2012-05-08T16:57:55.586Z] INFO: agent1/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:02:49.339Z] INFO: agent1/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:02:49.404Z] INFO: agent1/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:02:49.404Z] INFO: agent1/73267 on headnode: message\n',
|
||||
].join(''));
|
||||
t.end();
|
||||
});
|
||||
});
|
||||
|
||||
test('mixed text and gzip logs', function (t) {
|
||||
exec(BUNYAN + ' corpus/log1.log.gz corpus/log2.log',
|
||||
function (err, stdout, stderr) {
|
||||
t.error(err);
|
||||
t.equal(stdout, [
|
||||
'[2012-05-08T16:57:55.586Z] INFO: agent1/73267 on headnode: message\n',
|
||||
'[2012-05-08T16:58:55.586Z] INFO: agent2/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:01:49.339Z] INFO: agent2/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:02:47.404Z] INFO: agent2/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:02:49.339Z] INFO: agent1/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:02:49.404Z] INFO: agent1/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:02:49.404Z] INFO: agent1/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:02:57.404Z] INFO: agent2/73267 on headnode: message\n',
|
||||
'[2012-05-08T17:08:01.105Z] INFO: agent2/76156 on headnode: message\n',
|
||||
].join(''));
|
||||
t.end();
|
||||
});
|
||||
});
|
||||
|
|
BIN
test/corpus/log1.log.gz
Normal file
BIN
test/corpus/log1.log.gz
Normal file
Binary file not shown.
Loading…
Reference in a new issue