You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					217 lines
				
				5.8 KiB
			
		
		
			
		
	
	
					217 lines
				
				5.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# npmlog
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The logger util that npm uses.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This logger is very basic.  It does the logging for npm.  It supports
							 | 
						||
| 
								 | 
							
								custom levels and colored output.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								By default, logs are written to stderr.  If you want to send log messages
							 | 
						||
| 
								 | 
							
								to outputs other than streams, then you can change the `log.stream`
							 | 
						||
| 
								 | 
							
								member, or you can just listen to the events that it emits, and do
							 | 
						||
| 
								 | 
							
								whatever you want with them.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Installation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```console
							 | 
						||
| 
								 | 
							
								npm install npmlog --save
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Basic Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var log = require('npmlog')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// additional stuff ---------------------------+
							 | 
						||
| 
								 | 
							
								// message ----------+                         |
							 | 
						||
| 
								 | 
							
								// prefix ----+      |                         |
							 | 
						||
| 
								 | 
							
								// level -+   |      |                         |
							 | 
						||
| 
								 | 
							
								//        v   v      v                         v
							 | 
						||
| 
								 | 
							
								    log.info('fyi', 'I have a kitty cat: %j', myKittyCat)
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.level
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* {String}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The level to display logs at.  Any logs at or above this level will be
							 | 
						||
| 
								 | 
							
								displayed.  The special level `silent` will prevent anything from being
							 | 
						||
| 
								 | 
							
								displayed ever.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.record
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* {Array}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								An array of all the log messages that have been entered.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.maxRecordSize
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* {Number}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The maximum number of records to keep.  If log.record gets bigger than
							 | 
						||
| 
								 | 
							
								10% over this value, then it is sliced down to 90% of this value.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The reason for the 10% window is so that it doesn't have to resize a
							 | 
						||
| 
								 | 
							
								large array on every log entry.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.prefixStyle
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* {Object}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A style object that specifies how prefixes are styled.  (See below)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.headingStyle
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* {Object}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A style object that specifies how the heading is styled.  (See below)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.heading
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* {String} Default: ""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								If set, a heading that is printed at the start of every line.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.stream
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* {Stream} Default: `process.stderr`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The stream where output is written.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.enableColor()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Force colors to be used on all messages, regardless of the output
							 | 
						||
| 
								 | 
							
								stream.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.disableColor()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Disable colors on all messages.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.enableProgress()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Enable the display of log activity spinner and progress bar
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.disableProgress()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Disable the display of a progress bar
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.enableUnicode()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Force the unicode theme to be used for the progress bar.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.disableUnicode()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Disable the use of unicode in the progress bar.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.setGaugeTemplate(template)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Set a template for outputting the progress bar. See the [gauge documentation] for details.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[gauge documentation]: https://npmjs.com/package/gauge
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.setGaugeThemeset(themes)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Select a themeset to pick themes from for the progress bar. See the [gauge documentation] for details.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.pause()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Stop emitting messages to the stream, but do not drop them.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.resume()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Emit all buffered messages that were written while paused.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.log(level, prefix, message, ...)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* `level` {String} The level to emit the message at
							 | 
						||
| 
								 | 
							
								* `prefix` {String} A string prefix.  Set to "" to skip.
							 | 
						||
| 
								 | 
							
								* `message...` Arguments to `util.format`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Emit a log message at the specified level.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log\[level](prefix, message, ...)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								For example,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* log.silly(prefix, message, ...)
							 | 
						||
| 
								 | 
							
								* log.verbose(prefix, message, ...)
							 | 
						||
| 
								 | 
							
								* log.info(prefix, message, ...)
							 | 
						||
| 
								 | 
							
								* log.http(prefix, message, ...)
							 | 
						||
| 
								 | 
							
								* log.warn(prefix, message, ...)
							 | 
						||
| 
								 | 
							
								* log.error(prefix, message, ...)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Like `log.log(level, prefix, message, ...)`.  In this way, each level is
							 | 
						||
| 
								 | 
							
								given a shorthand, so you can do `log.info(prefix, message)`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.addLevel(level, n, style, disp)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* `level` {String} Level indicator
							 | 
						||
| 
								 | 
							
								* `n` {Number} The numeric level
							 | 
						||
| 
								 | 
							
								* `style` {Object} Object with fg, bg, inverse, etc.
							 | 
						||
| 
								 | 
							
								* `disp` {String} Optional replacement for `level` in the output.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Sets up a new level with a shorthand function and so forth.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Note that if the number is `Infinity`, then setting the level to that
							 | 
						||
| 
								 | 
							
								will cause all log messages to be suppressed.  If the number is
							 | 
						||
| 
								 | 
							
								`-Infinity`, then the only way to show it is to enable all log messages.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.newItem(name, todo, weight)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* `name` {String} Optional; progress item name.
							 | 
						||
| 
								 | 
							
								* `todo` {Number} Optional; total amount of work to be done. Default 0.
							 | 
						||
| 
								 | 
							
								* `weight` {Number} Optional; the weight of this item relative to others. Default 1.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This adds a new `are-we-there-yet` item tracker to the progress tracker. The
							 | 
						||
| 
								 | 
							
								object returned has the `log[level]` methods but is otherwise an
							 | 
						||
| 
								 | 
							
								`are-we-there-yet` `Tracker` object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.newStream(name, todo, weight)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This adds a new `are-we-there-yet` stream tracker to the progress tracker. The
							 | 
						||
| 
								 | 
							
								object returned has the `log[level]` methods but is otherwise an
							 | 
						||
| 
								 | 
							
								`are-we-there-yet` `TrackerStream` object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## log.newGroup(name, weight)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This adds a new `are-we-there-yet` tracker group to the progress tracker. The
							 | 
						||
| 
								 | 
							
								object returned has the `log[level]` methods but is otherwise an
							 | 
						||
| 
								 | 
							
								`are-we-there-yet` `TrackerGroup` object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Events
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Events are all emitted with the message object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* `log` Emitted for all messages
							 | 
						||
| 
								 | 
							
								* `log.<level>` Emitted for all messages with the `<level>` level.
							 | 
						||
| 
								 | 
							
								* `<prefix>` Messages with prefixes also emit their prefix as an event.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Style Objects
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Style objects can have the following fields:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* `fg` {String} Color for the foreground text
							 | 
						||
| 
								 | 
							
								* `bg` {String} Color for the background
							 | 
						||
| 
								 | 
							
								* `bold`, `inverse`, `underline` {Boolean} Set the associated property
							 | 
						||
| 
								 | 
							
								* `bell` {Boolean} Make a noise (This is pretty annoying, probably.)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Message Objects
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Every log event is emitted with a message object, and the `log.record`
							 | 
						||
| 
								 | 
							
								list contains all of them that have been created.  They have the
							 | 
						||
| 
								 | 
							
								following fields:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* `id` {Number}
							 | 
						||
| 
								 | 
							
								* `level` {String}
							 | 
						||
| 
								 | 
							
								* `prefix` {String}
							 | 
						||
| 
								 | 
							
								* `message` {String} Result of `util.format()`
							 | 
						||
| 
								 | 
							
								* `messageRaw` {Array} Arguments to `util.format()`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Blocking TTYs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								We use [`set-blocking`](https://npmjs.com/package/set-blocking) to set
							 | 
						||
| 
								 | 
							
								stderr and stdout blocking if they are tty's and have the setBlocking call.
							 | 
						||
| 
								 | 
							
								This is a work around for an issue in early versions of Node.js 6.x, which
							 | 
						||
| 
								 | 
							
								made stderr and stdout non-blocking on OSX. (They are always blocking
							 | 
						||
| 
								 | 
							
								Windows and were never blocking on Linux.) `npmlog` needs them to be blocking
							 | 
						||
| 
								 | 
							
								so that it can allow output to stdout and stderr to be interlaced.
							 |