프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / 00.Program / node_modules / bunyan / CHANGES.md

이력 | 보기 | 이력해설 | 다운로드 (44.8 KB)

1 39 HKM
# bunyan Changelog
2
3
Known issues:
4
5
- [issue #58] Can't install to a dir with spaces. This is [this node-gyp
6
  bug](https://github.com/TooTallNate/node-gyp/issues/65).
7
8
## not yet released
9
10
(nothing yet)
11
12
13
## 1.8.12
14
15
- [issue #444] Fix the `bunyan` CLI to not duplicate the "HTTP/1.1 ..." status
16
  line when serializing a "res" field.
17
18
19
## 1.8.11
20
21
- [issue #504] The `bunyan` 1.x CLI adds a `Host: $client_req.address[:$client_req.port]`
22
  header when rendering a `client_req` field in a log record. Fix that here to:
23
  (a) not add it if `client_req.headers` already includes a host header; and
24
  (b) not include the given `port` if it is 80 or 443 (*assuming* that is the
25
  default port.
26
  Note: `bunyan` 2.x CLI will stop adding this Host header because it is a guess
27
  that can be wrong and misleading.
28
29
30
## 1.8.10
31
32
- Ensure that `bunyan` errors out if attempting to use `-p PID` and
33
  file args at the same time.
34
35
36
## 1.8.9
37
38
- [pull #409, issue #246] Revert a change added to the `bunyan` CLI version
39
  1.0.1 where `SIGINT` was ignored, such that Ctrl+C could not be used to
40
  terminate bunyan. (By @zbjornson and @davepacheco.)
41
- [pull #469] Fix a strict mode (`"use strict;"`) error in some versions of
42
  Safari.
43
44
45
## 1.8.8
46
47
- Fix breakage due to a silly last minute "fix 'make check'".
48
49
50
## 1.8.7
51
52
Note: *Bad release.* Use 1.8.8 or later.
53
54
- [issue #484] Fix breakage due to #474 in previous release.
55
56
57
## 1.8.6
58
59
Note: *Bad release.* Use 1.8.7 or later.
60
61
- [issue #474] Bunyan's `safeCycles` is too slow when logging large objects.
62
63
64
## 1.8.5
65
66
- [issue #401] Improved performance when using disabled log levels.
67
68
69
## 1.8.4
70
71
- [issue #454] Fix `src` usage with node v7.
72
73
74
## 1.8.3
75
76
- [issue #450] Fix `log.info(null)` crash that resulted from #426 in v1.8.2.
77
78
79
## 1.8.2
80
81
- [issue #449] Bump dtrace-provider dep to 0.7.0 to help avoid deprecation
82
  warnings with node v6 in some cases.
83
- [issue #426] Ensure `log.info({err: err})` results in a "msg" value, just
84
  like `log.info(err)`.
85
86
87
## 1.8.1
88
89
- [pull #386] Fix bad bug in rotation that could cause a crash with
90
  error message "cannot start a rotation when already rotating"
91
  (by Frankie O'Rourke). The bug was introduced in 1.8.0.
92
93
94
## 1.8.0
95
96
Note: *Bad release.* An addition in this release broke 'rotating-file' usage.
97
Use 1.8.1 or later.
98
99
- [issue #370] Fix `bunyan -p ...` (i.e. DTrace integration) on node
100
  4.x and 5.x.
101
- [issue #329, pull #330] Update the 'rotating-file' stream to do a file
102
  rotation on initialization if the mtime on the file path indicates the
103
  last rotation time was missed -- i.e. if the app wasn't running at the
104
  time. (by Paul Milham.)
105
106
107
## 1.7.1
108
109
- [issue #332, pull #355] Ensure stream for type='stream' stream is a writable
110
  stream. (By Michael Nisi.)
111
112
- [issue #344] Fix "rotating-file" Bunyan streams to not miss rotations when configured
113
  for a period greater than approximately 25 days. Before this there was an issue
114
  where periods greater than node.js's maximum `setTimeout` length would fail to rotate.
115
  (By Martijn Schrage.)
116
117
- [issue #234, pull #345] Improve `bunyan` CLI rendering of "res" field
118
  HTTP responses to not show two blank lines for an empty body.
119
  (By Michael Nisi.)
120
121
122
## 1.7.0
123
124
- [pull #311, #302, #310] Improve the runtime environment detection to fix
125
  running under [NW.js](http://nwjs.io/). Contributions by Adam Lynch, Jeremy
126
  Ruppel, and Aleksey Timchenko.
127
128
- [pull #318] Add `reemitErrorEvents` optional boolean for streams added to a
129
  Bunyan logger to control whether an "error" event on the stream will be
130
  re-emitted on the `Logger` instance.
131
132
        var log = bunyan.createLogger({
133
            name: 'foo',
134
            streams: [
135
                {
136
                    type: 'raw',
137
                    stream: new MyCustomStream(),
138
                    reemitErrorEvents: true
139
                }
140
            ]
141
        });
142
143
  Before this change, "error" events were re-emitted on [`file`
144
  streams](https://github.com/trentm/node-bunyan#stream-type-file) only. The new
145
  behaviour is as follows:
146
147
    - `reemitErrorEvents` not specified: `file` streams will re-emit error events
148
      on the Logger instance.
149
    - `reemitErrorEvents: true`: error events will be re-emitted on the Logger
150
      for any stream with a `.on()` function -- which includes file streams,
151
      process.stdout/stderr, and any object that inherits from EventEmitter.
152
    - `reemitErrorEvents: false`: error events will not be re-emitted for any
153
      streams.
154
155
  Dev Note: Bunyan `Logger` objects don't currently have a `.close()` method
156
  in which registered error event handlers can be *un*registered. That means
157
  that a (presumably rare) situation where code adds dozens of Bunyan Logger
158
  streams to, e.g. process.stdout, and with `reemitErrorEvents: true`, could
159
  result in leaking Logger objects.
160
161
  Original work for allowing "error" re-emitting on non-file streams is
162
  by Marc Udoff in pull #318.
163
164
165
## 1.6.0
166
167
- [pull #304, issue #245] Use [Moment.js][momentjs.com] library to handle
168
  `bunyan` CLI time formatting in some cases, especially to fix display of
169
  local time. It is now required for local time formatting (i.e. `bunyan -L`
170
  or `bunyan --time local`). (By David M. Lee.)
171
172
- [pull #252] Fix errant `client_res={}` in `bunyan` CLI rendering, and avoid
173
  extra newlines in `client_req` rendering in some cases. (By Thomas Heymann.)
174
175
- [pull #291, issue #303] Fix `LOG.child(...)` to *not* override the "hostname"
176
  field of the parent. A use case is when one manually sets "hostname" to
177
  something other than `os.hostname()`. (By github.com/Cactusbone.)
178
179
- [issue #325] Allow one to set `level: 0` in `createLogger` to turn on
180
  logging for all levels. (Adapted from #336 by github.com/sometimesalready.)
181
182
- Add guards (to `resolveLevel`) so that all "level" values are validated.
183
  Before this, a bogus level like "foo" or -12 or `['some', 'array']` would
184
  silently be accepted -- with undefined results.
185
186
- Doc updates for #340 and #305.
187
188
- Update `make test` to test against node 5, 4, 0.12 and 0.10.
189
190
191
## 1.5.1
192
193
- [issue #296] Fix `src: true`, which was broken in v1.5.0.
194
195
196
## 1.5.0
197
198
Note: *Bad release.* The addition of `'use strict';` broke Bunyan's `src: true`
199
feature. Use 1.5.1 instead.
200
201
- [pull #236, issue #231, issue #223] Fix strict mode in the browser.
202
- [pull #282, issue #213] Fixes bunyan to work with webpack. By Denis Izmaylov.
203
- [pull #294] Update to dtrace-provider 0.6 to fix with node 4.0 and io.js 3.0.
204
- Dropped support for 0.8 (can't install deps easily anymore for running
205
  test suite). Bump to a recent iojs version for testing.
206
207
208
## 1.4.0
209
210
(Bumping minor ver b/c I'm wary of dtrace-provider changes. :)
211
212
- [issue #258, pull #259] Update to dtrace-provider 0.5 to fix
213
  install and tests on recent io.js versions.
214
- safe-json-stringify@1.0.3 changed output, breaking some tests. Fix those.
215
216
217
## 1.3.6
218
219
- [issue #244] Make `bunyan` defensive on `res.header=null`.
220
221
222
## 1.3.5
223
224
- [issue #233] Make `bunyan` defensive on res.header as a boolean.
225
- [issue #242] Make `bunyan` defensive on err.stack not being a string.
226
227
228
## 1.3.4
229
230
- Allow `log.child(...)` to work even if the logger is a *sub-class*
231
  of Bunyan's Logger class.
232
- [issue #219] Hide 'source-map-support' require from browserify.
233
- [issue #218] Reset `haveNonRawStreams` on `<logger>.addStream`.
234
235
236
## 1.3.3
237
238
- [pull #127] Update to dtrace-provider 0.4.0, which gives io.js 1.x support
239
  for dtrace-y parts of Bunyan.
240
241
242
## 1.3.2
243
244
- [pull #182] Fallback to using the optional 'safe-json-stringify' module
245
  if `JSON.stringify` throws -- possibly with an enumerable property
246
  getter than throws. By Martin Gausby.
247
248
249
## 1.3.1
250
251
- Export `bunyan.RotatingFileStream` which is needed if one wants to
252
  customize it. E.g. see issue #194.
253
254
- [pull #122] Source Map support for caller line position for [the "src"
255
  field](https://github.com/trentm/node-bunyan#src). This could be interesting
256
  for [CoffeeScript](http://coffeescript.org/documentation/docs/sourcemap.html)
257
  users of Bunyan. By Manuel Schneider.
258
259
- [issue #164] Ensure a top-level `level` given in `bunyan.createLogger`
260
  is *used* for given `streams`. For example, ensure that the following
261
  results in the stream having a DEBUG level:
262
263
        var log = bunyan.createLogger({
264
            name: 'foo',
265
            level: 'debug',
266
            streams: [
267
                {
268
                    path: '/var/tmp/foo.log'
269
                }
270
            ]
271
        });
272
273
  This was broken in the 1.0.1 release. Between that release and 1.3.0
274
  the "/var/tmp/foo.log" stream would be at the INFO level (Bunyan's
275
  default level).
276
277
278
## 1.3.0
279
280
- [issue #103] `bunyan -L` (or `bunyan --time local`) to show local time.
281
  Bunyan log records store `time` in UTC time. Sometimes it is convenient
282
  to display in local time.
283
284
- [issue #205] Fix the "The Bunyan CLI crashed!" checking to properly warn of
285
  the common failure case when `-c CONDITION` is being used.
286
287
288
## 1.2.4
289
290
- [issue #210] Export `bunyan.nameFromLevel` and `bunyan.levelFromName`. It can
291
  be a pain for custom streams to have to reproduce that.
292
293
- [issue #100] Gracefully handle the case of an unbound
294
  `Logger.{info,debug,...}` being used for logging, e.g.:
295
296
        myEmittingThing.on('data', log.info)
297
298
  Before this change, bunyan would throw. Now it emits a warning to stderr
299
  *once*, and then silently ignores those log attempts, e.g.:
300
301
        bunyan usage error: /Users/trentm/tm/node-bunyan/foo.js:12: attempt to log with an unbound log method: `this` is: { _events: { data: [Function] } }
302
303
304
## 1.2.3
305
306
- [issue #184] Fix log rotation for rotation periods > ~25 days. Before this
307
  change, a rotation period longer than this could hit [the maximum setTimeout
308
  delay in node.js](https://github.com/joyent/node/issues/8656). By Daniel Juhl.
309
310
311
## 1.2.2
312
313
- Drop the guard that a bunyan Logger level must be between TRACE (10)
314
  and FATAL (60), inclusive. This allows a trick of setting the level
315
  to `FATAL + 1` to turn logging off. While the standard named log levels are
316
  the golden path, then intention was not to get in the way of using
317
  other level numbers.
318
319
320
## 1.2.1
321
322
- [issue #178, #181] Get at least dtrace-provider 0.3.1 for
323
  optionalDependencies to get a fix for install with decoupled npm (e.g. with
324
  homebrew's node and npm).
325
326
327
## 1.2.0
328
329
- [issue #157] Restore dtrace-provider as a dependency (in
330
  "optionalDependencies").
331
332
  Dtrace-provider version 0.3.0 add build sugar that should eliminate the
333
  problems from older versions:
334
  The build is not attempted on Linux and Windows. The build spew is
335
  *not* emitted by default (use `V=1 npm install` to see it); instead a
336
  short warning is emitted if the build fails.
337
338
  Also, importantly, the new dtrace-provider fixes working with node
339
  v0.11/0.12.
340
341
342
## 1.1.3
343
344
- [issue #165] Include extra `err` fields in `bunyan` CLI output. Before
345
  this change only the fields part of the typical node.js error stack
346
  (err.stack, err.message, err.name) would be emitted, even though
347
  the Bunyan *library* would typically include err.code and err.signal
348
  in the raw JSON log record.
349
350
351
## 1.1.2
352
353
- Fix a breakage in `log.info(err)` on a logger with no serializers.
354
355
356
## 1.1.1
357
358
Note: *Bad release.* It breaks `log.info(err)` on a logger with no serializers.
359
Use version 1.1.2.
360
361
- [pull #168] Fix handling of `log.info(err)` to use the `log` Logger's `err`
362
  serializer if it has one, instead of always using the core Bunyan err
363
  serializer. (By Mihai Tomescu.)
364
365
366
## 1.1.0
367
368
- [issue #162] Preliminary support for [browserify](http://browserify.org/).
369
  See [the section in the README](../README.md#browserify).
370
371
372
## 1.0.1
373
374
- [issues #105, #138, #151] Export `<Logger>.addStream(...)` and
375
  `<Logger>.addSerializers(...)` to be able to add them after Logger creation.
376
  Thanks @andreineculau!
377
378
- [issue #159] Fix bad handling in construtor guard intending to allow
379
  creation without "new": `var log = Logger(...)`. Thanks @rmg!
380
381
- [issue #156] Smaller install size via .npmignore file.
382
383
- [issue #126, #161] Ignore SIGINT (Ctrl+C) when processing stdin. `...| bunyan`
384
  should expect the preceding process in the pipeline to handle SIGINT. While
385
  it is doing so, `bunyan` should continue to process any remaining output.
386
  Thanks @timborodin and @jnordberg!
387
388
- [issue #160] Stop using ANSI 'grey' in `bunyan` CLI output, because of the
389
  problems that causes with Solarized Dark themes (see
390
  <https://github.com/altercation/solarized/issues/220>).
391
392
393
## 1.0.0
394
395
- [issue #87] **Backward incompatible change to `-c CODE`** improving
396
  performance by over 10x (good!), with a backward incompatible change to
397
  semantics (unfortunate), and adding some sugar (good!).
398
399
  The `-c CODE` implementation was changed to use a JS function for processing
400
  rather than `vm.runInNewContext`. The latter was specatularly slow, so
401
  won't be missed. Unfortunately this does mean a few semantic differences in
402
  the `CODE`, the most noticeable of which is that **`this` is required to
403
  access the object fields:**
404
405
        # Bad. Works with bunyan 0.x but not 1.x.
406
        $ bunyan -c 'pid === 123' foo.log
407
        ...
408
409
        # Good. Works with all versions of bunyan
410
        $ bunyan -c 'this.pid === 123' foo.log
411
        ...
412
413
  The old behaviour of `-c` can be restored with the `BUNYAN_EXEC=vm`
414
  environment variable:
415
416
        $ BUNYAN_EXEC=vm bunyan -c 'pid === 123' foo.log
417
        ...
418
419
  Some sugar was also added: the TRACE, DEBUG, ... constants are defined, so
420
  one can:
421
422
        $ bunyan -c 'this.level >= ERROR && this.component === "http"' foo.log
423
        ...
424
425
  And example of the speed improvement on a 10 MiB log example:
426
427
        $ time BUNYAN_EXEC=vm bunyan -c 'this.level === ERROR' big.log | cat >slow
428
429
        real    0m6.349s
430
        user    0m6.292s
431
        sys    0m0.110s
432
433
        $ time bunyan -c 'this.level === ERROR' big.log | cat >fast
434
435
        real    0m0.333s
436
        user    0m0.303s
437
        sys    0m0.028s
438
439
  The change was courtesy Patrick Mooney (https://github.com/pfmooney). Thanks!
440
441
- Add `bunyan -0 ...` shortcut for `bunyan -o bunyan ...`.
442
443
- [issue #135] **Backward incompatible.** Drop dtrace-provider even from
444
  `optionalDependencies`. Dtrace-provider has proven a consistent barrier to
445
  installing bunyan, because it is a binary dep. Even as an *optional* dep it
446
  still caused confusion and install noise.
447
448
  Users of Bunyan on dtrace-y platforms (SmartOS, Mac, Illumos, Solaris) will
449
  need to manually `npm install dtrace-provider` themselves to get [Bunyan's
450
  dtrace support](https://github.com/trentm/node-bunyan#runtime-log-snooping-via-dtrace)
451
  to work. If not installed, bunyan should stub it out properly.
452
453
454
455
## 0.23.1
456
457
- [pull #125, pull #97, issue #73] Unref rotating-file timeout which was
458
  preventing processes from exiting (by https://github.com/chakrit and
459
  https://github.com/glenn-murray-bse). Note: this only fixes the issue
460
  for node 0.10 and above.
461
462
463
## 0.23.0
464
465
- [issue #139] Fix `bunyan` crash on a log record with `res.header` that is an
466
  object. A side effect of this improvement is that a record with `res.statusCode`
467
  but no header info will render a response block, for example:
468
469
        [2012-08-08T10:25:47.637Z]  INFO: my-service/12859 on my-host: some message (...)
470
            ...
471
            --
472
            HTTP/1.1 200 OK
473
            --
474
            ...
475
476
- [pull #42] Fix `bunyan` crash on a log record with `req.headers` that is a *string*
477
  (by https://github.com/aexmachina).
478
479
- Drop node 0.6 support. I can't effectively `npm install` with a node 0.6
480
  anymore.
481
482
- [issue #85] Ensure logging a non-object/non-string doesn't throw (by
483
  https://github.com/mhart). This changes fixes:
484
485
        log.info(<bool>)     # TypeError: Object.keys called on non-object
486
        log.info(<function>) # "msg":"" (instead of wanted "msg":"[Function]")
487
        log.info(<array>)    # "msg":"" (instead of wanted "msg":util.format(<array>))
488
489
490
## 0.22.3
491
492
- Republish the same code to npm.
493
494
495
## 0.22.2
496
497
Note: Bad release. The published package in the npm registry got corrupted. Use 0.22.3 or later.
498
499
- [issue #131] Allow `log.info(<number>)` and, most importantly, don't crash on that.
500
501
- Update 'mv' optional dep to latest.
502
503
504
## 0.22.1
505
506
- [issue #111] Fix a crash when attempting to use `bunyan -p` on a platform without
507
  dtrace.
508
509
- [issue #101] Fix a crash in `bunyan` rendering a record with unexpected "res.headers".
510
511
512
## 0.22.0
513
514
- [issue #104] `log.reopenFileStreams()` convenience method to be used with external log
515
  rotation.
516
517
518
## 0.21.4
519
520
- [issue #96] Fix `bunyan` to default to paging (with `less`) by default in node 0.10.0.
521
  The intention has always been to default to paging for node >=0.8.
522
523
524
## 0.21.3
525
526
- [issue #90] Fix `bunyan -p '*'` breakage in version 0.21.2.
527
528
529
## 0.21.2
530
531
**Note: Bad release. The switchrate change below broke `bunyan -p '*'` usage
532
(see issue #90). Use 0.21.3 or later.**
533
534
- [issue #88] Should be able to efficiently combine "-l" with "-p *".
535
536
- Avoid DTrace buffer filling up, e.g. like this:
537
538
        $ bunyan -p 42241 > /tmp/all.log
539
        dtrace: error on enabled probe ID 3 (ID 75795: bunyan42241:mod-87ea640:log-trace:log-trace): out of scratch space in action #1 at DIF offset 12
540
        dtrace: error on enabled probe ID 3 (ID 75795: bunyan42241:mod-87ea640:log-trace:log-trace): out of scratch space in action #1 at DIF offset 12
541
        dtrace: 138 drops on CPU 4
542
        ...
543
544
  From Bryan: "the DTrace buffer is filling up because the string size is so
545
  large... by increasing the switchrate, you're increasing the rate at
546
  which that buffer is emptied."
547
548
549
## 0.21.1
550
551
- [pull #83] Support rendering 'client_res' key in bunyan CLI (by
552
  github.com/mcavage).
553
554
555
## 0.21.0
556
557
- 'make check' clean, 4-space indenting. No functional change here, just
558
  lots of code change.
559
- [issue #80, #82] Drop assert that broke using 'rotating-file' with
560
  a default `period` (by github.com/ricardograca).
561
562
563
## 0.20.0
564
565
- [Slight backward incompatibility] Fix serializer bug introduced in 0.18.3
566
  (see below) to only apply serializers to log records when appropriate.
567
568
  This also makes a semantic change to custom serializers. Before this change
569
  a serializer function was called for a log record key when that value was
570
  truth-y. The semantic change is to call the serializer function as long
571
  as the value is not `undefined`. That means that a serializer function
572
  should handle falsey values such as `false` and `null`.
573
574
- Update to latest 'mv' dep (required for rotating-file support) to support
575
  node v0.10.0.
576
577
578
## 0.19.0
579
580
**WARNING**: This release includes a bug introduced in bunyan 0.18.3 (see
581
below). Please upgrade to bunyan 0.20.0.
582
583
- [Slight backward incompatibility] Change the default error serialization
584
  (a.k.a. `bunyan.stdSerializers.err`) to *not* serialize all additional
585
  attributes of the given error object. This is an open door to unsafe logging
586
  and logging should always be safe. With this change, error serialization
587
  will log these attributes: message, name, stack, code, signal. The latter
588
  two are added because some core node APIs include those fields (e.g.
589
  `child_process.exec`).
590
591
  Concrete examples where this has hurt have been the "domain" change
592
  necessitating 0.18.3 and a case where
593
  [node-restify](https://github.com/mcavage/node-restify) uses an error object
594
  as the response object. When logging the `err` and `res` in the same log
595
  statement (common for restify audit logging), the `res.body` would be JSON
596
  stringified as '[Circular]' as it had already been emitted for the `err` key.
597
  This results in a WTF with the bunyan CLI because the `err.body` is not
598
  rendered.
599
600
  If you need the old behaviour back you will need to do this:
601
602
        var bunyan = require('bunyan');
603
        var errSkips = {
604
            // Skip domain keys. `domain` especially can have huge objects that can
605
            // OOM your app when trying to JSON.stringify.
606
            domain: true,
607
            domain_emitter: true,
608
            domain_bound: true,
609
            domain_thrown: true
610
        };
611
        bunyan.stdSerializers.err = function err(err) {
612
           if (!err || !err.stack)
613
               return err;
614
           var obj = {
615
               message: err.message,
616
               name: err.name,
617
               stack: getFullErrorStack(err)
618
           }
619
           Object.keys(err).forEach(function (k) {
620
               if (err[k] !== undefined && !errSkips[k]) {
621
                   obj[k] = err[k];
622
               }
623
           });
624
           return obj;
625
         };
626
627
- "long" and "bunyan" output formats for the CLI. `bunyan -o long` is the default
628
  format, the same as before, just called "long" now instead of the cheesy "paul"
629
  name. The "bunyan" output format is the same as "json-0", just with a more
630
  convenient name.
631
632
633
## 0.18.3
634
635
**WARNING**: This release introduced a bug such that all serializers are
636
applied to all log records even if the log record did not contain the key
637
for that serializer. If a logger serializer function does not handle
638
being given `undefined`, then you'll get warnings like this on stderr:
639
640
    bunyan: ERROR: This should never happen. This is a bug in <https://github.com/trentm/node-bunyan> or in this application. Exception from "foo" Logger serializer: Error: ...
641
        at Object.bunyan.createLogger.serializers.foo (.../myapp.js:20:15)
642
        at Logger._applySerializers (.../lib/bunyan.js:644:46)
643
        at Array.forEach (native)
644
        at Logger._applySerializers (.../lib/bunyan.js:640:33)
645
        ...
646
647
and the following junk in written log records:
648
649
    "foo":"(Error in Bunyan log "foo" serializer broke field. See stderr for details.)"
650
651
Please upgrade to bunyan 0.20.0.
652
653
654
- Change the `bunyan.stdSerializers.err` serializer for errors to *exclude*
655
  [the "domain*" keys](http://nodejs.org/docs/latest/api/all.html#all_additions_to_error_objects).
656
  `err.domain` will include its assigned members which can arbitrarily large
657
  objects that are not intended for logging.
658
659
- Make the "dtrace-provider" dependency optional. I hate to do this, but
660
  installing bunyan on Windows is made very difficult with this as a required
661
  dep.  Even though "dtrace-provider" stubs out for non-dtrace-y platforms,
662
  without a compiler and Python around, node-gyp just falls over.
663
664
665
## 0.18.2
666
667
- [pull #67] Remove debugging prints in rotating-file support.
668
  (by github.com/chad3814).
669
- Update to dtrace-provider@0.2.7.
670
671
672
## 0.18.1
673
674
- Get the `bunyan` CLI to **not** automatically page (i.e. pipe to `less`)
675
  if stdin isn't a TTY, or if following dtrace probe output (via `-p PID`),
676
  or if not given log file arguments.
677
678
679
## 0.18.0
680
681
- Automatic paging support in the `bunyan` CLI (similar to `git log` et al).
682
  IOW, `bunyan` will open your pager (by default `less`) and pipe rendered
683
  log output through it. A main benefit of this is getting colored logs with
684
  a pager without the pain. Before you had to explicit use `--color` to tell
685
  bunyan to color output when the output was not a TTY:
686
687
        bunyan foo.log --color | less -R        # before
688
        bunyan foo.log                          # now
689
690
  Disable with the `--no-pager` option or the `BUNYAN_NO_PAGER=1` environment
691
  variable.
692
693
  Limitations: Only supported for node >=0.8. Windows is not supported (at
694
  least not yet).
695
696
- Switch test suite to nodeunit (still using a node-tap'ish API via
697
  a helper).
698
699
700
## 0.17.0
701
702
- [issue #33] Log rotation support:
703
704
        var bunyan = require('bunyan');
705
        var log = bunyan.createLogger({
706
            name: 'myapp',
707
            streams: [{
708
                type: 'rotating-file',
709
                path: '/var/log/myapp.log',
710
                count: 7,
711
                period: 'daily'
712
            }]
713
        });
714
715
716
- Tweak to CLI default pretty output: don't special case "latency" field.
717
  The special casing was perhaps nice, but less self-explanatory.
718
  Before:
719
720
        [2012-12-27T21:17:38.218Z]  INFO: audit/45769 on myserver: handled: 200 (15ms, audit=true, bar=baz)
721
          GET /foo
722
          ...
723
724
  After:
725
726
        [2012-12-27T21:17:38.218Z]  INFO: audit/45769 on myserver: handled: 200 (audit=true, bar=baz, latency=15)
727
          GET /foo
728
          ...
729
730
- *Exit* CLI on EPIPE, otherwise we sit there useless processing a huge log
731
  file with, e.g.  `bunyan huge.log | head`.
732
733
734
## 0.16.8
735
736
- Guards on `-c CONDITION` usage to attempt to be more user friendly.
737
  Bogus JS code will result in this:
738
739
        $ bunyan portal.log -c 'this.req.username==boo@foo'
740
        bunyan: error: illegal CONDITION code: SyntaxError: Unexpected token ILLEGAL
741
          CONDITION script:
742
            Object.prototype.TRACE = 10;
743
            Object.prototype.DEBUG = 20;
744
            Object.prototype.INFO = 30;
745
            Object.prototype.WARN = 40;
746
            Object.prototype.ERROR = 50;
747
            Object.prototype.FATAL = 60;
748
            this.req.username==boo@foo
749
          Error:
750
            SyntaxError: Unexpected token ILLEGAL
751
                at new Script (vm.js:32:12)
752
                at Function.Script.createScript (vm.js:48:10)
753
                at parseArgv (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:465:27)
754
                at main (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:1252:16)
755
                at Object.<anonymous> (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:1330:3)
756
                at Module._compile (module.js:449:26)
757
                at Object.Module._extensions..js (module.js:467:10)
758
                at Module.load (module.js:356:32)
759
                at Function.Module._load (module.js:312:12)
760
                at Module.runMain (module.js:492:10)
761
762
  And all CONDITION scripts will be run against a minimal valid Bunyan
763
  log record to ensure they properly guard against undefined values
764
  (at least as much as can reasonably be checked). For example:
765
766
        $ bunyan portal.log -c 'this.req.username=="bob"'
767
        bunyan: error: CONDITION code cannot safely filter a minimal Bunyan log record
768
          CONDITION script:
769
            Object.prototype.TRACE = 10;
770
            Object.prototype.DEBUG = 20;
771
            Object.prototype.INFO = 30;
772
            Object.prototype.WARN = 40;
773
            Object.prototype.ERROR = 50;
774
            Object.prototype.FATAL = 60;
775
            this.req.username=="bob"
776
          Minimal Bunyan log record:
777
            {
778
              "v": 0,
779
              "level": 30,
780
              "name": "name",
781
              "hostname": "hostname",
782
              "pid": 123,
783
              "time": 1355514346206,
784
              "msg": "msg"
785
            }
786
          Filter error:
787
            TypeError: Cannot read property 'username' of undefined
788
                at bunyan-condition-0:7:9
789
                at Script.Object.keys.forEach.(anonymous function) [as runInNewContext] (vm.js:41:22)
790
                at parseArgv (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:477:18)
791
                at main (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:1252:16)
792
                at Object.<anonymous> (/Users/trentm/tm/node-bunyan-0.x/bin/bunyan:1330:3)
793
                at Module._compile (module.js:449:26)
794
                at Object.Module._extensions..js (module.js:467:10)
795
                at Module.load (module.js:356:32)
796
                at Function.Module._load (module.js:312:12)
797
                at Module.runMain (module.js:492:10)
798
799
  A proper way to do that condition would be:
800
801
        $ bunyan portal.log -c 'this.req && this.req.username=="bob"'
802
803
804
805
## 0.16.7
806
807
- [issue #59] Clear a possibly interrupted ANSI color code on signal
808
  termination.
809
810
811
## 0.16.6
812
813
- [issue #56] Support `bunyan -p NAME` to dtrace all PIDs matching 'NAME' in
814
  their command and args (using `ps -A -o pid,command | grep NAME` or, on SunOS
815
  `pgrep -lf NAME`). E.g.:
816
817
        bunyan -p myappname
818
819
  This is useful for usage of node's [cluster
820
  module](http://nodejs.org/docs/latest/api/all.html#all_cluster) where you'll
821
  have multiple worker processes.
822
823
824
## 0.16.5
825
826
- Allow `bunyan -p '*'` to capture bunyan dtrace probes from **all** processes.
827
- issue #55: Add support for `BUNYAN_NO_COLOR` environment variable to
828
  turn off all output coloring. This is still overridden by the `--color`
829
  and `--no-color` options.
830
831
832
## 0.16.4
833
834
- issue #54: Ensure (again, see 0.16.2) that stderr from the dtrace child
835
  process (when using `bunyan -p PID`) gets through. There had been a race
836
  between exiting bunyan and the flushing of the dtrace process' stderr.
837
838
839
## 0.16.3
840
841
- Drop 'trentm-dtrace-provider' fork dep now that
842
  <https://github.com/chrisa/node-dtrace-provider/pull/24> has been resolved.
843
  Back to dtrace-provider.
844
845
846
## 0.16.2
847
848
- Ensure that stderr from the dtrace child process (when using `bunyan -p PID`)
849
  gets through. The `pipe` usage wasn't working on SmartOS. This is important
850
  to show the user if they need to 'sudo'.
851
852
853
## 0.16.1
854
855
- Ensure that a possible dtrace child process (with using `bunyan -p PID`) is
856
  terminated on signal termination of the bunyan CLI (at least for SIGINT,
857
  SIGQUIT, SIGTERM, SIGHUP).
858
859
860
## 0.16.0
861
862
- Add `bunyan -p PID` support. This is a convenience wrapper that effectively
863
  calls:
864
865
        dtrace -x strsize=4k -qn 'bunyan$PID:::log-*{printf("%s", copyinstr(arg0))}' | bunyan
866
867
868
## 0.15.0
869
870
- issue #48: Dtrace support! The elevator pitch is you can watch all logging
871
  from all Bunyan-using process with something like this:
872
873
        dtrace -x strsize=4k -qn 'bunyan*:::log-*{printf("%d: %s: %s", pid, probefunc, copyinstr(arg0))}'
874
875
  And this can include log levels *below* what the service is actually configured
876
  to log. E.g. if the service is only logging at INFO level and you need to see
877
  DEBUG log messages, with this you can. Obviously this only works on dtrace-y
878
  platforms: Illumos derivatives of SunOS (e.g. SmartOS, OmniOS), Mac, FreeBSD.
879
880
  Or get the bunyan CLI to render logs nicely:
881
882
        dtrace -x strsize=4k -qn 'bunyan*:::log-*{printf("%s", copyinstr(arg0))}' | bunyan
883
884
  See <https://github.com/trentm/node-bunyan#dtrace-support> for details. By
885
  Bryan Cantrill.
886
887
888
## 0.14.6
889
890
- Export `bunyan.safeCycles()`. This may be useful for custom `type == "raw"`
891
  streams that may do JSON stringification of log records themselves. Usage:
892
893
        var str = JSON.stringify(rec, bunyan.safeCycles());
894
895
- [issue #49] Allow a `log.child()` to specify the level of inherited streams.
896
  For example:
897
898
        # Before
899
        var childLog = log.child({...});
900
        childLog.level('debug');
901
902
        # After
903
        var childLog = log.child({..., level: 'debug'});
904
905
- Improve the Bunyan CLI crash message to make it easier to provide relevant
906
  details in a bug report.
907
908
909
## 0.14.5
910
911
- Fix a bug in the long-stack-trace error serialization added in 0.14.4. The
912
  symptom:
913
914
        bunyan@0.14.4: .../node_modules/bunyan/lib/bunyan.js:1002
915
          var ret = ex.stack || ex.toString();
916
                      ^
917
        TypeError: Cannot read property 'stack' of undefined
918
            at getFullErrorStack (.../node_modules/bunyan/lib/bunyan.js:1002:15)
919
            ...
920
921
922
## 0.14.4
923
924
- **Bad release. Use 0.14.5 instead.**
925
- Improve error serialization to walk the chain of `.cause()` errors
926
  from the likes of `WError` or `VError` error classes from
927
  [verror](https://github.com/davepacheco/node-verror) and
928
  [restify v2.0](https://github.com/mcavage/node-restify). Example:
929
930
        [2012-10-11T00:30:21.871Z] ERROR: imgapi/99612 on 0525989e-2086-4270-b960-41dd661ebd7d: my-message
931
            ValidationFailedError: my-message; caused by TypeError: cause-error-message
932
                at Server.apiPing (/opt/smartdc/imgapi/lib/app.js:45:23)
933
                at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
934
                at Server.setupReq (/opt/smartdc/imgapi/lib/app.js:178:9)
935
                at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
936
                at Server.parseBody (/opt/smartdc/imgapi/node_modules/restify/lib/plugins/body_parser.js:15:33)
937
                at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
938
                at Server.parseQueryString (/opt/smartdc/imgapi/node_modules/restify/lib/plugins/query.js:40:25)
939
                at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
940
                at Server._run (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:579:17)
941
                at Server._handle.log.trace.req (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:480:38)
942
            Caused by: TypeError: cause-error-message
943
                at Server.apiPing (/opt/smartdc/imgapi/lib/app.js:40:25)
944
                at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
945
                at Server.setupReq (/opt/smartdc/imgapi/lib/app.js:178:9)
946
                at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
947
                at Server.parseBody (/opt/smartdc/imgapi/node_modules/restify/lib/plugins/body_parser.js:15:33)
948
                at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
949
                at Server.parseQueryString (/opt/smartdc/imgapi/node_modules/restify/lib/plugins/query.js:40:25)
950
                at next (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:550:50)
951
                at Server._run (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:579:17)
952
                at Server._handle.log.trace.req (/opt/smartdc/imgapi/node_modules/restify/lib/server.js:480:38)
953
954
955
## 0.14.2
956
957
- [issue #45] Fix bunyan CLI (default output mode) to not crash on a 'res'
958
  field that isn't a response object, but a string.
959
960
961
## 0.14.1
962
963
- [issue #44] Fix the default `bunyan` CLI output of a `res.body` that is an
964
  object instead of a string. See issue#38 for the same with `req.body`.
965
966
967
## 0.14.0
968
969
- [pull #41] Safe `JSON.stringify`ing of emitted log records to avoid blowing
970
  up on circular objects (by Isaac Schlueter).
971
972
973
## 0.13.5
974
975
- [issue #39] Fix a bug with `client_req` handling in the default output
976
  of the `bunyan` CLI.
977
978
979
## 0.13.4
980
981
- [issue #38] Fix the default `bunyan` CLI output of a `req.body` that is an
982
  object instead of a string.
983
984
985
## 0.13.3
986
987
- Export `bunyan.resolveLevel(NAME-OR-NUM)` to resolve a level name or number
988
  to its log level number value:
989
990
        > bunyan.resolveLevel('INFO')
991
        30
992
        > bunyan.resolveLevel('debug')
993
        20
994
995
  A side-effect of this change is that the uppercase level name is now allowed
996
  in the logger constructor.
997
998
999
## 0.13.2
1000
1001
- [issue #35] Ensure that an accidental `log.info(BUFFER)`, where BUFFER is
1002
  a node.js Buffer object, doesn't blow up.
1003
1004
1005
## 0.13.1
1006
1007
- [issue #34] Ensure `req.body`, `res.body` and other request/response fields
1008
  are emitted by the `bunyan` CLI (mostly by Rob Gulewich).
1009
1010
1011
1012
## 0.13.0
1013
1014
- [issue #31] Re-instate defines for the (uppercase) log level names (TRACE,
1015
  DEBUG, etc.) in `bunyan -c "..."` filtering condition code. E.g.:
1016
1017
        $ ... | bunyan -c 'level >= ERROR'
1018
1019
1020
## 0.12.0
1021
1022
- [pull #32] `bunyan -o short` for more concise output (by Dave Pacheco). E.g.:
1023
1024
        22:56:52.856Z  INFO myservice: My message
1025
1026
  instead of:
1027
1028
        [2012-02-08T22:56:52.856Z]  INFO: myservice/123 on example.com: My message
1029
1030
1031
## 0.11.3
1032
1033
- Add '--strict' option to `bunyan` CLI to suppress all but legal Bunyan JSON
1034
  log lines. By default non-JSON, and non-Bunyan lines are passed through.
1035
1036
1037
## 0.11.2
1038
1039
- [issue #30] Robust handling of 'req' field without a 'headers' subfield
1040
  in `bunyan` CLI.
1041
- [issue #31] Pull the TRACE, DEBUG, et al defines from `bunyan -c "..."`
1042
  filtering code. This was added in v0.11.1, but has a significant adverse
1043
  affect.
1044
1045
1046
## 0.11.1
1047
1048
- **Bad release. The TRACE et al names are bleeding into the log records
1049
  when using '-c'.**
1050
- Add defines for the (uppercase) log level names (TRACE, DEBUG, etc.) in
1051
  `bunyan -c "..."` filtering condition code. E.g.:
1052
1053
        $ ... | bunyan -c 'level >= ERROR'
1054
1055
1056
## 0.11.0
1057
1058
- [pull #29] Add -l/--level for level filtering, and -c/--condition for
1059
  arbitrary conditional filtering (by github.com/isaacs):
1060
1061
        $ ... | bunyan -l error   # filter out log records below error
1062
        $ ... | bunyan -l 50      # numeric value works too
1063
        $ ... | bunyan -c 'level===50'              # equiv with -c filtering
1064
        $ ... | bunyan -c 'pid===123'               # filter on any field
1065
        $ ... | bunyan -c 'pid===123' -c '_audit'   # multiple filters
1066
1067
1068
## 0.10.0
1069
1070
- [pull #24] Support for gzip'ed log files in the bunyan CLI (by
1071
  github.com/mhart):
1072
1073
        $ bunyan foo.log.gz
1074
        ...
1075
1076
1077
## 0.9.0
1078
1079
- [pull #16] Bullet proof the `bunyan.stdSerializers` (by github.com/rlidwka).
1080
1081
- [pull #15] The `bunyan` CLI will now chronologically merge multiple log
1082
  streams when it is given multiple file arguments. (by github.com/davepacheco)
1083
1084
        $ bunyan foo.log bar.log
1085
        ... merged log records ...
1086
1087
- [pull #15] A new `bunyan.RingBuffer` stream class that is useful for
1088
  keeping the last N log messages in memory. This can be a fast way to keep
1089
  recent, and thus hopefully relevant, log messages. (by @dapsays,
1090
  github.com/davepacheco)
1091
1092
  Potential uses: Live debugging if a running process could inspect those
1093
  messages. One could dump recent log messages at a finer log level than is
1094
  typically logged on
1095
  [`uncaughtException`](http://nodejs.org/docs/latest/api/all.html#all_event_uncaughtexception).
1096
1097
        var ringbuffer = new bunyan.RingBuffer({ limit: 100 });
1098
        var log = new bunyan({
1099
            name: 'foo',
1100
            streams: [{
1101
                type: 'raw',
1102
                stream: ringbuffer,
1103
                level: 'debug'
1104
            }]
1105
        });
1106
1107
        log.info('hello world');
1108
        console.log(ringbuffer.records);
1109
1110
- Add support for "raw" streams. This is a logging stream that is given
1111
  raw log record objects instead of a JSON-stringified string.
1112
1113
        function Collector() {
1114
            this.records = [];
1115
        }
1116
        Collector.prototype.write = function (rec) {
1117
            this.records.push(rec);
1118
        }
1119
        var log = new Logger({
1120
            name: 'mylog',
1121
            streams: [{
1122
                type: 'raw',
1123
                stream: new Collector()
1124
            }]
1125
        });
1126
1127
  See "examples/raw-stream.js". I expect raw streams to be useful for
1128
  piping Bunyan logging to separate services (e.g. <http://www.loggly.com/>,
1129
  <https://github.com/etsy/statsd>) or to separate in-process handling.
1130
1131
- Add test/corpus/*.log files (accidentally excluded) so the test suite
1132
  actually works(!).
1133
1134
1135
## 0.8.0
1136
1137
- [pull #21] Bunyan loggers now re-emit `fs.createWriteStream` error events.
1138
  By github.com/EvanOxfeld. See "examples/handle-fs-error.js" and
1139
  "test/error-event.js" for details.
1140
1141
        var log = new Logger({name: 'mylog', streams: [{path: FILENAME}]});
1142
        log.on('error', function (err, stream) {
1143
            // Handle error writing to or creating FILENAME.
1144
        });
1145
1146
- jsstyle'ing (via `make check`)
1147
1148
1149
## 0.7.0
1150
1151
- [issue #12] Add `bunyan.createLogger(OPTIONS)` form, as is more typical in
1152
  node.js APIs.  This'll eventually become the preferred form.
1153
1154
1155
## 0.6.9
1156
1157
- Change `bunyan` CLI default output to color "src" info red. Before the "src"
1158
  information was uncolored. The "src" info is the filename, line number and
1159
  function name resulting from using `src: true` in `Logger` creation. I.e.,
1160
  the `(/Users/trentm/tm/node-bunyan/examples/hi.js:10)` in:
1161
1162
        [2012-04-10T22:28:58.237Z]  INFO: myapp/39339 on banana.local (/Users/trentm/tm/node-bunyan/examples/hi.js:10): hi
1163
1164
- Tweak `bunyan` CLI default output to still show an "err" field if it doesn't
1165
  have a "stack" attribute.
1166
1167
1168
## 0.6.8
1169
1170
- Fix bad bug in `log.child({...}, true);` where the added child fields **would
1171
  be added to the parent's fields**. This bug only existed for the "fast child"
1172
  path (that second `true` argument). A side-effect of fixing this is that
1173
  the "fast child" path is only 5 times as fast as the regular `log.child`,
1174
  instead of 10 times faster.
1175
1176
1177
## 0.6.7
1178
1179
- [issue #6] Fix bleeding 'type' var to global namespace. (Thanks Mike!)
1180
1181
1182
## 0.6.6
1183
1184
- Add support to the `bunyan` CLI taking log file path args, `bunyan foo.log`,
1185
  in addition to the usual `cat foo.log | bunyan`.
1186
- Improve reliability of the default output formatting of the `bunyan` CLI.
1187
  Before it could blow up processing log records missing some expected
1188
  fields.
1189
1190
1191
## 0.6.5
1192
1193
- ANSI coloring output from `bunyan` CLI tool (for the default output mode/style).
1194
  Also add the '--color' option to force coloring if the output stream is not
1195
  a TTY, e.g. `cat my.log | bunyan --color | less -R`. Use `--no-color` to
1196
  disable coloring, e.g. if your terminal doesn't support ANSI codes.
1197
- Add 'level' field to log record before custom fields for that record. This
1198
  just means that the raw record JSON will show the 'level' field earlier,
1199
  which is a bit nicer for raw reading.
1200
1201
1202
## 0.6.4
1203
1204
- [issue #5] Fix `log.info() -> boolean` to work properly. Previous all were
1205
  returning false. Ditto all trace/debug/.../fatal methods.
1206
1207
1208
## 0.6.3
1209
1210
- Allow an optional `msg` and arguments to the `log.info(<Error> err)` logging
1211
  form. For example, before:
1212
1213
        log.debug(my_error_instance)            // good
1214
        log.debug(my_error_instance, "boom!")   // wasn't allowed
1215
1216
  Now the latter is allowed if you want to expliciting set the log msg. Of course
1217
  this applies to all the `log.{trace|debug|info...}()` methods.
1218
1219
- `bunyan` cli output: clarify extra fields with quoting if empty or have
1220
  spaces. E.g. 'cmd' and 'stderr' in the following:
1221
1222
        [2012-02-12T00:30:43.736Z] INFO: mo-docs/43194 on banana.local: buildDocs results (req_id=185edca2-2886-43dc-911c-fe41c09ec0f5, route=PutDocset, error=null, stderr="", cmd="make docs")
1223
1224
1225
## 0.6.2
1226
1227
- Fix/guard against unintended inclusion of some files in npm published package
1228
  due to <https://github.com/isaacs/npm/issues/2144>
1229
1230
1231
## 0.6.1
1232
1233
- Internal: starting jsstyle usage.
1234
- Internal: add .npmignore. Previous packages had reams of bunyan crud in them.
1235
1236
1237
## 0.6.0
1238
1239
- Add 'pid' automatic log record field.
1240
1241
1242
## 0.5.3
1243
1244
- Add 'client_req' (HTTP client request) standard formatting in `bunyan` CLI
1245
  default output.
1246
- Improve `bunyan` CLI default output to include *all* log record keys. Unknown keys
1247
  are either included in the first line parenthetical (if short) or in the indented
1248
  subsequent block (if long or multiline).
1249
1250
1251
## 0.5.2
1252
1253
- [issue #3] More type checking of `new Logger(...)` and `log.child(...)`
1254
  options.
1255
- Start a test suite.
1256
1257
1258
## 0.5.1
1259
1260
- [issue #2] Add guard on `JSON.stringify`ing of log records before emission.
1261
  This will prevent `log.info` et al throwing on record fields that cannot be
1262
  represented as JSON. An error will be printed on stderr and a clipped log
1263
  record emitted with a 'bunyanMsg' key including error details. E.g.:
1264
1265
        bunyan: ERROR: could not stringify log record from /Users/trentm/tm/node-bunyan/examples/unstringifyable.js:12: TypeError: Converting circular structure to JSON
1266
        {
1267
          "name": "foo",
1268
          "hostname": "banana.local",
1269
          "bunyanMsg": "bunyan: ERROR: could not stringify log record from /Users/trentm/tm/node-bunyan/examples/unstringifyable.js:12: TypeError: Converting circular structure to JSON",
1270
        ...
1271
1272
  Some timing shows this does effect log speed:
1273
1274
        $ node tools/timeguard.js     # before
1275
        Time try/catch-guard on JSON.stringify:
1276
         - log.info:  0.07365ms per iteration
1277
        $ node tools/timeguard.js     # after
1278
        Time try/catch-guard on JSON.stringify:
1279
         - log.info:  0.07368ms per iteration
1280
1281
1282
## 0.5.0
1283
1284
- Use 10/20/... instead of 1/2/... for level constant values. Ostensibly this
1285
  allows for intermediary levels from the defined "trace/debug/..." set.
1286
  However, that is discouraged. I'd need a strong user argument to add
1287
  support for easily using alternative levels. Consider using a separate
1288
  JSON field instead.
1289
- s/service/name/ for Logger name field. "service" is unnecessarily tied
1290
  to usage for a service. No need to differ from log4j Logger "name".
1291
- Add `log.level(...)` and `log.levels(...)` API for changing logger stream
1292
  levels.
1293
- Add `TRACE|DEBUG|INFO|WARN|ERROR|FATAL` level constants to exports.
1294
- Add `log.info(err)` special case for logging an `Error` instance. For
1295
  example `log.info(new TypeError("boom")` will produce:
1296
1297
        ...
1298
        "err": {
1299
          "message": "boom",
1300
          "name": "TypeError",
1301
          "stack": "TypeError: boom\n    at Object.<anonymous> ..."
1302
        },
1303
        "msg": "boom",
1304
        ...
1305
1306
1307
## 0.4.0
1308
1309
- Add `new Logger({src: true})` config option to have a 'src' attribute be
1310
  automatically added to log records with the log call source info. Example:
1311
1312
        "src": {
1313
          "file": "/Users/trentm/tm/node-bunyan/examples/src.js",
1314
          "line": 20,
1315
          "func": "Wuzzle.woos"
1316
        },
1317
1318
1319
## 0.3.0
1320
1321
- `log.child(options[, simple])` Added `simple` boolean arg. Set `true` to
1322
  assert that options only add fields (no config changes). Results in a 10x
1323
  speed increase in child creation. See "tools/timechild.js". On my Mac,
1324
  "fast child" creation takes about 0.001ms. IOW, if your app is dishing
1325
  10,000 req/s, then creating a log child for each request will take
1326
  about 1% of the request time.
1327
- `log.clone` -> `log.child` to better reflect the relationship: streams and
1328
  serializers are inherited. Streams can't be removed as part of the child
1329
  creation. The child doesn't own the parent's streams (so can't close them).
1330
- Clean up Logger creation. The goal here was to ensure `log.child` usage
1331
  is fast. TODO: measure that.
1332
- Add `Logger.stdSerializers.err` serializer which is necessary to get good
1333
  Error object logging with node 0.6 (where core Error object properties
1334
  are non-enumerable).
1335
1336
1337
## 0.2.0
1338
1339
- Spec'ing core/recommended log record fields.
1340
- Add `LOG_VERSION` to exports.
1341
- Improvements to request/response serializations.
1342
1343
1344
## 0.1.0
1345
1346
First release.