some updated TODOs for 2.x work

This commit is contained in:
Trent Mick 2017-05-03 23:16:14 -07:00
parent f812975f0f
commit 2a5bdd231a

144
TODO.md
View file

@ -1,12 +1,22 @@
# v2 # v2
- ^C fix. Done in 1.8.9. However, see a recent ticket about ^C/EPIPE issues. - Exit handling:
I suspect the uncommited exeunt work will fix that.
- node-exeunt - make a ticket with notes from "bunyan CLI exit handling" section below
- resolve it with the uncommited changes here
- figure out how to 'make cutarelease' for 2.x but tag as beta
- comment/grokking of bunyan.js flushing issues at
https://github.com/trentm/node-bunyan/issues/37 would be nice. Even if just a
link to exeunt and some examples. Wiki page?
- respond to Qs here: https://github.com/trentm/node-bunyan/issues/37#issuecomment-282933502
- consider whether to backport the exit handling work to 1.x???
- `createLogger(<config-and-fields>, <fields>)` changes (#460) - `createLogger(<config-and-fields>, <fields>)` changes (#460)
- see section below - see section below
- the dtrace-provider thing (#487) - the dtrace-provider thing (#487)
TODO: answer Cody email TODO: answer Cody email
- https://github.com/trentm/node-bunyan/issues/398 if easy, perhaps on 1.x
as well
- use package.json version for VERSION - use package.json version for VERSION
- use deps - use deps
- dashdash - dashdash
@ -19,6 +29,134 @@
- formatters: read up again on `glp master..1.x` - formatters: read up again on `glp master..1.x`
- support for customer formatters - support for customer formatters
- for the CLI as well? How? ~/.bunyanrc? - for the CLI as well? How? ~/.bunyanrc?
- if doing ~/.bunyanrc, then consider color schemes
# bunyan CLI exit handling
It has some problems currently.
One basic problem is that our stdout.on('error') handler can call into
drainStdoutAndExit multiple times, leading to the multiple Event Emitters
leak warning, and with a pager we are waiting for the pager to exit.
Why doesn't the pager exit on ^C? Is that a less thing? Perhaps due to our
LESS opts?
Setting up a file to work with:
```javascript
$ cat lots.js
var bunyan = require('./')
var log = bunyan.createLogger({
name: 'lots',
streams: [
{
type: 'file',
path: './lots.log'
}
]
});
N = Math.pow(2, 16);
for (var i = N; i >= 0; i--) {
log.info({i: i}, 'another record');
}
$ node lots.js
```
## Issue 1: EventEmitter mem leak
```
$ node --version
v4.8.0
$ ./bin/bunyan lots.log | cat
[2017-04-05T01:47:15.899Z] INFO: lots/53218 on danger0.local: another record (i=65536)
[2017-04-05T01:47:15.901Z] INFO: lots/53218 on danger0.local: another record (i=65535)
...
^C # ^C quickly before it is done writing rendered logs
...
[2017-04-05T01:47:16.023Z] INFO: lots/53218 on danger0.local: another record (i=57351)
[2017-04-05T01:47:16.023Z] INFO: lots/53218
^C(node) warning: possible EventEmitter memory leak detected. 11 drain listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Socket.addListener (events.js:239:17)
at Socket.Readable.on (_stream_readable.js:680:33)
at drainStdoutAndExit (/Users/trentm/tm/node-bunyan/bin/bunyan:1116:12)
at Socket.<anonymous> (/Users/trentm/tm/node-bunyan/bin/bunyan:1597:13)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at onwriteError (_stream_writable.js:313:10)
at onwrite (_stream_writable.js:331:5)
at WritableState.onwrite (_stream_writable.js:90:5)
at fireErrorCallbacks (net.js:457:13)
```
## Issue 2: "write after end" infinite loop with ^C in pager
Mac. Node v4.8.0. Happens with node 0.10 as well.
```
$ ./bin/bunyan lots.log
[2017-04-05T01:47:15.899Z] INFO: lots/53218 on danger0.local: another record (i=65536)
[2017-04-05T01:47:15.901Z] INFO: lots/53218 on danger0.local: another record (i=65535)
[2017-04-05T01:47:15.901Z] INFO: lots/53218 on danger0.local: another record (i=65534)
...
^C
...
[2017-04-05T01:47:15.909Z] INFO: lots/53218 on danger0.local: another record (i=65490)
:[Error: write after end]
[Error: write after end]
[Error: write after end]
[Error: write after end]
[Error: write after end]
(node) warning: possible EventEmitter memory leak detected. 11 drain listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Socket.addListener (events.js:239:17)
at Socket.Readable.on (_stream_readable.js:680:33)
at drainStdoutAndExit (/Users/trentm/tm/node-bunyan/bin/bunyan:1116:12)
at Socket.<anonymous> (/Users/trentm/tm/node-bunyan/bin/bunyan:1600:13)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at writeAfterEnd (_stream_writable.js:169:10)
at Socket.Writable.write (_stream_writable.js:212:5)
at Socket.write (net.js:645:40)
at emit (/Users/trentm/tm/node-bunyan/bin/bunyan:1097:32)
[Error: write after end]
[Error: write after end]
[Error: write after end]
[Error: write after end]
... # this goes forever until 'q' to quit pager
```
With bunyan's internal `_DEBUG`:
```
...
[2017-04-05T01:47:15.909Z] INFO: lots/53218 on danger0.local: another record (i=65491)
[2017-04-05T01:47:15.909Z] INFO: lots/53218 on danger0.local: another record (i=65490)
:(bunyan: cleanupAndExit)
(stdout error event: Error: write after end)
[Error: write after end]
(drainStdoutAndExit(1))
(stdout error event: Error: write after end)
[Error: write after end]
(drainStdoutAndExit(1))
(stdout error event: Error: write after end)
[Error: write after end]
(drainStdoutAndExit(1))
(stdout error event: Error: write after end)
[Error: write after end]
...
(drainStdoutAndExit(1))
(stdout error event: Error: write EPIPE)
(drainStdoutAndExit(0))
(bunyan: pager exit)
(bunyan: pager exit -> process.exit(1))
```
# changes to ctor and log.child to separate fields from config # changes to ctor and log.child to separate fields from config