From 947705ad1e73457a88676681501acedb1d5a1d76 Mon Sep 17 00:00:00 2001 From: Trent Mick Date: Fri, 8 Mar 2013 16:32:10 -0800 Subject: [PATCH] 'long' and 'bunyan' output formats --- CHANGES.md | 5 ++++- bin/bunyan | 22 +++++++++++++++------- docs/bunyan.1.ronn | 13 +++++++------ test/cli.test.js | 20 ++++++++++++++++++++ 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 6eb3daf..a3ab6da 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,10 @@ Known issues: ## bunyan 0.18.4 (not yet released) -(nothing yet) +- "long" and "bunyan" output formats for the CLI. `bunyan -o long` is the default + format, the same as before, just called "long" now instead of the cheesy "paul" + name. The "bunyan" output format is the same as "json-0", just with a more + convenient name. ## bunyan 0.18.3 diff --git a/bin/bunyan b/bin/bunyan index 11006b9..7f5d24f 100755 --- a/bin/bunyan +++ b/bin/bunyan @@ -31,17 +31,20 @@ var nodeSpawnSupportsStdio = ( var _DEBUG = false; // Output modes. -var OM_PAUL = 1; +var OM_LONG = 1; var OM_JSON = 2; var OM_INSPECT = 3; var OM_SIMPLE = 4; var OM_SHORT = 5; +var OM_BUNYAN = 6; var OM_FROM_NAME = { - "paul": OM_PAUL, + "long": OM_LONG, + "paul": OM_LONG, /* backward compat */ "json": OM_JSON, "inspect": OM_INSPECT, "simple": OM_SIMPLE, - "short": OM_SHORT + "short": OM_SHORT, + "bunyan": OM_BUNYAN }; @@ -202,11 +205,12 @@ function printHelp() { console.log(" --no-color Force no coloring (e.g. terminal doesn't support it)"); console.log(" -o, --output MODE"); console.log(" Specify an output mode/format. One of"); - console.log(" paul: (the default) pretty"); + console.log(" long: (the default) pretty"); console.log(" json: JSON output, 2-space indent"); console.log(" json-N: JSON output, N-space indent, e.g. 'json-4'"); + console.log(" bunyan: 0 indented JSON, bunyan's native format"); console.log(" inspect: node.js `util.inspect` output"); - console.log(" short: like paul, but more concise"); + console.log(" short: like 'long', but more concise"); console.log(" -j shortcut for `-o json`"); console.log(""); console.log("Log Levels:"); @@ -352,7 +356,7 @@ function parseArgv(argv) { help: false, color: null, paginate: null, - outputMode: OM_PAUL, + outputMode: OM_LONG, jsonIndent: 2, level: null, conditions: null, @@ -646,7 +650,7 @@ function emitRecord(rec, line, opts, stylize) { short = true; /* jsl:fall-thru */ - case OM_PAUL: + case OM_LONG: // [time] LEVEL: name[/component]/pid on hostname (src): msg* (extras...) // msg* // -- @@ -896,6 +900,10 @@ function emitRecord(rec, line, opts, stylize) { emit(util.inspect(rec, false, Infinity, true) + '\n'); break; + case OM_BUNYAN: + emit(JSON.stringify(rec, null, 0) + '\n'); + break; + case OM_JSON: emit(JSON.stringify(rec, null, opts.jsonIndent) + '\n'); break; diff --git a/docs/bunyan.1.ronn b/docs/bunyan.1.ronn index 7614559..1fe0d1e 100644 --- a/docs/bunyan.1.ronn +++ b/docs/bunyan.1.ronn @@ -103,8 +103,8 @@ Output options: Force no coloring (e.g. terminal doesn't support it) * `-o FORMAT`, `--output FORMAT`: - Specify an output format. One of `paul` (the default), `short`, `json`, - `json-N`, or `inspect`. + Specify an output format. One of `long` (the default), `short`, `json`, + `json-N`, `bunyan` (the native bunyan 0-indent JSON output) or `inspect`. * `-j`: Shortcut for `-o json`. @@ -128,15 +128,16 @@ scripts, uppercase symbols like "DEBUG" are defined for convenience. ## OUTPUT FORMATS FORMAT NAME DESCRIPTION - paul (default) The default output. Long form. Colored and "pretty". + long (default) The default output. Long form. Colored and "pretty". 'req' and 'res' and 'err' fields are rendered specially as an HTTP request, HTTP response and exception - stack trace, respectively. Note: the "paul" name - is deprecated and will be changed to "long". + stack trace, respectively. For backward compat, the + name "paul" also works for this. short Like the default output, but more concise. Some typically redundant fields are ellided. json JSON output, 2-space indentation. - json-N JSON output, N-space indentation, e.g. "json-0" + json-N JSON output, N-space indentation, e.g. "json-4" + bunyan Alias for "json-0", the Bunyan "native" format. inspect Node.js `util.inspect` output. diff --git a/test/cli.test.js b/test/cli.test.js index fe68362..619c176 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -185,6 +185,26 @@ test('multiple logs', function (t) { }); }); +test('multiple logs, bunyan format', function (t) { + exec(_('%s -o bunyan %s/corpus/log1.log %s/corpus/log2.log', BUNYAN, __dirname, __dirname), + function (err, stdout, stderr) { + t.ifError(err); + t.equal(stdout, [ + '{"name":"agent1","pid":73267,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T16:57:55.586Z","v":0}', + '{"name":"agent2","pid":73267,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T16:58:55.586Z","v":0}', + '{"name":"agent2","pid":73267,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T17:01:49.339Z","v":0}', + '{"name":"agent2","pid":73267,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T17:02:47.404Z","v":0}', + '{"name":"agent1","pid":73267,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T17:02:49.339Z","v":0}', + '{"name":"agent1","pid":73267,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T17:02:49.404Z","v":0}', + '{"name":"agent1","pid":73267,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T17:02:49.404Z","v":0}', + '{"name":"agent2","pid":73267,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T17:02:57.404Z","v":0}', + '{"name":"agent2","pid":76156,"hostname":"headnode","level":30,"msg":"message","time":"2012-05-08T17:08:01.105Z","v":0}', + '' + ].join('\n')); + t.end(); + }); +}); + test('log1.log.gz', function (t) { exec(_('%s %s/corpus/log1.log.gz', BUNYAN, __dirname), function (err, stdout, stderr) {