README
@barusu/chalk-logger
chalk-logger is a colorful logger tool based on chalk(so you can use a lot of colors) and commander(so you can use command line parameters to customized the logger's behavior).
Install
npm
npm install --save @barusu/chalk-loggeryarn
yarn add @barusu/chalk-logger
Usage
Options
| Name | Type | Required | Default | Desc |
|---|---|---|---|---|
basename |
string | null |
false |
null |
see below |
mode |
'normal' | 'loose' |
false |
normal |
see below |
placeholderRegex |
RegExp | false |
/(?<!\\)\{\}/g |
string formatter placeholder regex |
name |
string | false |
- | name of logger |
level |
Level | false |
Level.INFO |
verbosity level of the logging output |
date |
boolean | false |
false |
whether to print the date |
title |
boolean | false |
true |
whether to print the title |
inline |
boolean | false |
false |
whether to print each log on one line |
colorful |
boolean | false |
true |
whether to print log surrounded with color |
encoding |
string | false |
utf-8 |
see below |
filepath |
string | false |
- | see below |
write |
(text: string) => void | false |
process.stdout |
see below |
dateChalk |
Chalk | Color | false |
chalk.gray |
color of date string |
nameChalk |
Chalk | Color | false |
chalk.gray |
color of logger name string |
Option Details
basename: Base of the logger name, when you change logger name accordingsetNamefunction, the basename will be prefixed of the logger namemodenormal: Print log onlyloose: Print a newline before and after the log
encoding: Specifying the file encoding offilepath, only works iffilepathis specifiedfilepath: Log output filewrite: Iffilepathis specified, the log is output tofilepathby default, otherwise to theprocess.stdout. You can specify your own write function to customize the output behavior of the log
Cli Options
--log-level <debug|verbose|info|warn|error|fatal>: specify global logger level.--log-name <new logger name>: specify global logger name.--log-mode <'normal' | 'loose'>: specify global logger mode.--log-flag <[no-](date|title|inline|colorful)>: the prefixno-represent negation.date: whether to print date. default value is falsetitle: whether to print title. default value is trueinline: each log record output in one line. default value is false.colorful: whether to print with colors. default value is true.
--log-output <filepath>: specify the output path (default behavior is output directory to stdout).- suggest: set
colorful = falseandinline = trueif you want to output logs into a file.
- suggest: set
--log-encoding <encoding>: specify the log file's encoding.
Examples
Basic:
// demo/demo1.ts import { ChalkLogger, ERROR } from 'chalk-logger' const logger = new ChalkLogger({ name: 'demo', level: ERROR, // the default value is INFO date: false, // the default value is false. colorful: true, // the default value is true. }, process.argv) logger.debug('A', 'B', 'C') logger.verbose('A', 'B', 'C') logger.info('a', 'b', 'c') logger.warn('X', 'Y', 'Z', { a: 1, b: 2}) logger.error('x', 'y', 'z', { c: { a: 'hello' }, b: { d: 'world' } }) logger.fatal('1', '2', '3')
Custom output format:
// demo/demo2.ts import chalk from 'chalk' import { ChalkLogger, ERROR, Level } from 'chalk-logger' let logger = new ChalkLogger({ name: 'demo', level: ERROR, // the default value is INFO date: false, // the default value is false. colorful: true, // the default value is true. }, process.argv) logger.formatHeader = function (level: Level, date: Date): string { let { desc } = level let { name } = this if( this.flags.colorful ) { desc = level.headerChalk.fg(desc) if (level.headerChalk.bg != null) desc = level.headerChalk.bg(desc) name = chalk.gray(name) } let header = `${desc} ${name}` if( !this.flags.date) return `[${header}]` let dateString = date.toLocaleTimeString() if( this.flags.colorful ) dateString = chalk.gray(dateString) return `<${dateString} ${header}>` } logger.debug('A', 'B', 'C') logger.verbose('A', 'B', 'C') logger.info('a', 'b', 'c') logger.warn('X', 'Y', 'Z', { a: 1, b: 2}) logger.error('x', 'y', 'z', { c: { a: 'hello' }, b: { d: 'world' } }) logger.fatal('1', '2', '3')
Custom output format (2):
// demo/demo3.ts import chalk from 'chalk' import { ChalkLogger, ERROR } from 'chalk-logger' let logger = new ChalkLogger({ name: 'demo', level: ERROR, // the default value is INFO date: false, // the default value is false. colorful: true, // the default value is true. dateChalk: 'green', nameChalk: chalk.cyan.bind(chalk), }, process.argv) logger.debug('A', 'B', 'C') logger.verbose('A', 'B', 'C') logger.info('a', 'b', 'c') logger.warn('X', 'Y', 'Z', { a: 1, b: 2}) logger.error('x', 'y', 'z', { c: { a: 'hello' }, b: { d: 'world' } }) logger.fatal('1', '2', '3')
Output to file
// demo/demo4.ts import path from 'path' import chalk from 'chalk' import { ChalkLogger, DEBUG } from 'chalk-logger' let logger = new ChalkLogger({ name: 'demo', level: DEBUG, // the default value is DEBUG date: true, // the default value is false. inline: true, colorful: false, // the default value is true. dateChalk: 'green', nameChalk: chalk.cyan.bind(chalk), filepath: path.resolve(__dirname, 'orz.log'), encoding: 'utf-8', }, process.argv) logger.debug('A', 'B', 'C') logger.verbose('A', 'B', 'C') logger.info('a', 'b', 'c') logger.warn('X', 'Y', 'Z', { a: 1, b: 2}) logger.error('x', 'y', 'z', { c: { a: 'hello' }, b: { d: 'world' } }) logger.fatal('1', '2', '3')
Register to commander:
// demo/demo5.ts import chalk from 'chalk' import commander from 'Commander' import { ChalkLogger, ERROR } from '../src' let logger = new ChalkLogger({ name: 'demo', level: ERROR, // the default value is INFO date: false, // the default value is false. colorful: true, // the default value is true. dateChalk: 'green', nameChalk: chalk.cyan.bind(chalk), }, process.argv) commander .version('v1.0.0') .arguments('[orz]') // register logger option to commander logger.registerToCommander(commander) // or ChalkLogger.registerToCommander(commander) commander .option('-e, --encoding <encoding>', 'specified <filepath>\'s encoding') .parse(process.argv) logger.debug('A', 'B', 'C') logger.verbose('A', 'B', 'C') logger.info('a', 'b', 'c') logger.warn('X', 'Y', 'Z', { a: 1, b: 2}) logger.error('x', 'y', 'z', { c: { a: 'hello' }, b: { d: 'world' } }) logger.fatal('1', '2', '3')
String format:
// demo/demo6.ts import { ChalkLogger, DEBUG } from '../src' let logger = new ChalkLogger({ name: 'demo', level: DEBUG, date: true, colorful: true, inline: true, }, process.argv) logger.verbose('user({})', { username: 'guanghechen', avatar: 'https://avatars0.githubusercontent.com/u/42513619?s=400&u=d878f4532bb5749979e18f3696b8985b90e9f78b&v=4' }) logger.error('bad argument ({}). error({})', { username: 123 }, new Error('username is invalid')) let logger2 = new ChalkLogger({ name: 'demo', level: DEBUG, date: true, colorful: true, inline: true, placeholderRegex: /(?<!\\)\<\>/g // change placeholder of string format }, process.argv) logger2.verbose('user(<>)', { username: 'guanghechen', avatar: 'https://avatars0.githubusercontent.com/u/42513619?s=400&u=d878f4532bb5749979e18f3696b8985b90e9f78b&v=4' }) logger2.error('bad argument (<>). error({})', { username: 123 }, new Error('username is invalid'))