some intro docs
This commit is contained in:
parent
e98335fb7e
commit
b3bd83c639
2 changed files with 89 additions and 11 deletions
99
README.md
99
README.md
|
@ -7,24 +7,97 @@ names for the requisite and common fields for a log record (see below).
|
||||||
Also: log4j is way more than you need.
|
Also: log4j is way more than you need.
|
||||||
|
|
||||||
|
|
||||||
|
# Current Status
|
||||||
|
|
||||||
|
Just play stuff here. Don't try to use this for realz yet.
|
||||||
|
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
// hi.js
|
The usual. All loggers must provide a "service" name. This is somewhat akin
|
||||||
|
to log4j logger "name", but Bunyan doesn't so hierarchical logger names.
|
||||||
|
|
||||||
|
$ cat hi.js
|
||||||
var Logger = require('bunyan');
|
var Logger = require('bunyan');
|
||||||
var log = new Logger({facility: "myapp", level: "info"});
|
var log = new Logger({service: "myapp", level: "info"});
|
||||||
log.info("hi");
|
log.info("hi");
|
||||||
|
|
||||||
$ node hi.js
|
Log records are JSON. "hostname", "time" and "v" (the Bunyan log
|
||||||
{"time":"2012-01-30T00:56:25.842Z","facility":"myapp","level":2,"message":"hi"}
|
format version) are added for you.
|
||||||
|
|
||||||
$ node hi.js | bunyan # CLI tool to filter/pretty-print JSON logs.
|
$ node hi.js
|
||||||
|
{"service":"myapp","hostname":"banana.local","level":2,"msg":"hi","time":"2012-01-31T00:07:44.216Z","v":0}
|
||||||
|
|
||||||
|
A `bunyan` tool is provided for pretty-printing bunyan logs and, eventually,
|
||||||
|
for filtering (e.g. `| bunyan -c 'level>3'`). This shows the default output
|
||||||
|
(which is fluid right now) and indented-JSON output. More output formats will
|
||||||
|
be added, including support for custom formats.
|
||||||
|
|
||||||
|
$ node hi.js | ./bin/bunyan # CLI tool to filter/pretty-print JSON logs.
|
||||||
|
[2012-01-31T00:08:11.387Z] INFO: myapp on banana.local: hi (<no-request_id>)
|
||||||
|
|
||||||
|
$ node hi.js | ./bin/bunyan -o json
|
||||||
{
|
{
|
||||||
"time": "2012-01-30T00:56:25.842Z",
|
"service": "myapp",
|
||||||
"facility": "myapp",
|
"hostname": "banana.local",
|
||||||
"level": 2,
|
"level": 2,
|
||||||
"message": "hi"
|
"msg": "hi",
|
||||||
|
"time": "2012-01-31T00:10:00.676Z",
|
||||||
|
"v": 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
By default, log output is to stdout. Explicitly that looks like:
|
||||||
|
|
||||||
|
var log = new Logger({service: "myapp", stream: process.stdout});
|
||||||
|
|
||||||
|
That is an abbreviated form for a single stream. You can defined multiple
|
||||||
|
streams at different levels:
|
||||||
|
|
||||||
|
var log = new Logger({
|
||||||
|
service: "amon",
|
||||||
|
streams: [
|
||||||
|
{
|
||||||
|
level: "info",
|
||||||
|
stream: process.stdout, // log INFO and above to stdout
|
||||||
|
},
|
||||||
|
{
|
||||||
|
level: "error",
|
||||||
|
path: "tmp/error.log" // log ERROR and above to a file
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
Support for syslog is planned.
|
||||||
|
|
||||||
|
|
||||||
|
# Future
|
||||||
|
|
||||||
|
See "TODO.md", but basically:
|
||||||
|
|
||||||
|
- "Renderer" support to handle extracting a JSON object for a log record
|
||||||
|
for particular object types, e.g. an HTTP request. So for example we
|
||||||
|
could do:
|
||||||
|
|
||||||
|
log.info({req: req}, "something about handling this request")
|
||||||
|
|
||||||
|
And the "req" renderer would extract a reasonable JSON object for that
|
||||||
|
request object -- presumably a subset of all attributes on the request
|
||||||
|
object.
|
||||||
|
|
||||||
|
This will key off the field name, IOW by convention, rather than getting
|
||||||
|
into `instanceof` grossness.
|
||||||
|
|
||||||
|
- Spec'ing and enforcing the fields (from dap's section in eng guide).
|
||||||
|
|
||||||
|
- Syslog support. Ring-buffer support for storing last N debug messages
|
||||||
|
(or whatever) in memory to support debugability without too much log load.
|
||||||
|
|
||||||
|
- More `bunyan` output formats and filtering features.
|
||||||
|
|
||||||
|
- Think about a bunyan dashboard that supports organizing and viewing logs
|
||||||
|
from multiple hosts and services.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Levels
|
# Levels
|
||||||
|
|
||||||
|
@ -34,12 +107,18 @@ Also: log4j is way more than you need.
|
||||||
info
|
info
|
||||||
debug
|
debug
|
||||||
|
|
||||||
TODO
|
TODO: doc these.
|
||||||
|
|
||||||
|
|
||||||
# Log Record Fields
|
# Log Record Fields
|
||||||
|
|
||||||
TODO
|
TODO: from dap and enforce these
|
||||||
|
|
||||||
|
- "request_id" (better name?) can't be required because some things don't
|
||||||
|
happen in a per-request context. Startup and background processing stuff
|
||||||
|
for example. Tho for request-y things, it is strongly encouraged because it
|
||||||
|
allows collating logs from multiple services for the same request.
|
||||||
|
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
|
||||||
|
|
1
TODO.md
1
TODO.md
|
@ -5,7 +5,6 @@
|
||||||
<http://journal.paul.querna.org/articles/2011/12/26/log-for-machines-in-json/>
|
<http://journal.paul.querna.org/articles/2011/12/26/log-for-machines-in-json/>
|
||||||
require: facility and hostname
|
require: facility and hostname
|
||||||
- bunyan cli: more layouts (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html)
|
- bunyan cli: more layouts (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html)
|
||||||
|
|
||||||
- bunyan cli: filter args a la json
|
- bunyan cli: filter args a la json
|
||||||
- bunyan cli: -c COND args a la json
|
- bunyan cli: -c COND args a la json
|
||||||
- docs
|
- docs
|
||||||
|
|
Loading…
Reference in a new issue