# 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

```bash
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
- ✔︎ Support logger level

## 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: '> ',
});
```

Support log level: `DEBUG` / `INFO` / `WARN` / `ERROR`.

```js
const logger = new ConsoleLogger({
  prefix: '> ',
  level: 'WARN',
});

logger.error('msg_error');
logger.info('msg_info');

// [15:03:46] prefix > msg_error
```

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.

## Options

- {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
- {String|Number} level - log level

## License

(The MIT License)
