schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# zlogger
 
[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Test coverage][codecov-image]][codecov-url]
[![David deps][david-image]][david-url]
[![Known Vulnerabilities][snyk-image]][snyk-url]
[![npm download][download-image]][download-url]
 
[npm-image]: https://img.shields.io/npm/v/zlogger.svg?style=flat-square
[npm-url]: https://npmjs.org/package/zlogger
[travis-image]: https://img.shields.io/travis/node-modules/zlogger.svg?style=flat-square
[travis-url]: https://travis-ci.org/node-modules/zlogger
[codecov-image]: https://codecov.io/gh/node-modules/zlogger/branch/master/graph/badge.svg
[codecov-url]: https://codecov.io/gh/node-modules/zlogger
[david-image]: https://img.shields.io/david/node-modules/zlogger.svg?style=flat-square
[david-url]: https://david-dm.org/node-modules/zlogger
[snyk-image]: https://snyk.io/test/npm/zlogger/badge.svg?style=flat-square
[snyk-url]: https://snyk.io/test/npm/zlogger
[download-image]: https://img.shields.io/npm/dm/zlogger.svg?style=flat-square
[download-url]: https://npmjs.org/package/zlogger
 
The last console logger
 
## Installation
 
```
npm install --save zlogger
```
 
## Feature
 
- ✔︎ Extends [Console](https://nodejs.org/api/console.html#console_new_console_stdout_stderr)
- ✔︎ Support custom prefix before every line
- ✔︎ Support custom stdout and stderr
- ✔︎ Support print time
- ✔︎ Support child logger
 
## Usage
 
zlogger is same as global `console` which has `.log`, `.info`, `.warn`, `.error`.
 
Every line will start with `prefix` that you customize.
 
```js
const logger = new ConsoleLogger({
  prefix: '> ',
});
```
 
Specify stdout/stderr, default is `process.stdout/process.stderr`, you can use `fs` if you want to print to file.
 
```js
const logger = new ConsoleLogger({
  stdout: fs.createWriteStream('stdout.log'),
  stderr: fs.createWriteStream('stderr.log'),
});
logger.info('info');
logger.error('error');
 
// cat stdout.log
// cat stderr.log
```
 
You can create a child logger, the first argument can be a ChildProcess or writable stream. If you give a prefix, it will print after prefix defined by the parent logger.
 
```js
const cp = require('child_process');
const logger = new ConsoleLogger({
  prefix: 'prefix > ',
});
logger.info('see directory')
 
const ls = cp.spawn('ls', { cwd: __dirname });
logger.child(ls, '> ');
 
// [15:03:46] prefix > see directory
// [15:03:46] prefix > > History.md
// [15:03:46] prefix > > README.md
// [15:03:46] prefix > > index.js
// [15:03:46] prefix > > node_modules
// [15:03:46] prefix > > package.json
// [15:03:46] prefix > > test
```
 
`.child` will return a new logger.
 
```js
const logger = new ConsoleLogger({
  prefix: 'parent> ',
});
logger.info('parent');
 
const child = logger.child('child> ');
child.info('child');
 
// [15:02:43] parent> parent
// [15:02:43] parent> child> child
```
 
It will print time before prefix, format is `[HH:MM:SS] `, but you can disable it.
 
## 参数
 
- {WriteStream} stdout - stdout, `.log` and `.info` will pipe to it,default is process.stdout
- {WriteStream} stderr - stderr, `.warn` and `.error` will pipe to it,default is process.stderr
- {String|Function} prefix - every line will start with `prefix`, if it's a function, it will be called every line print.
- {Boolean} time - print time
 
## License
 
(The MIT License)