Node.jsでlog4jsを使ってログを出力する

こんにちはさかじです。今年もよろしくお願いします。
Node.js初心者の私は、ログを出力するのについついconsole.log()を使いたくなってしまいます。きちんとログを出力するためにlog4jsを使ってみました。

インストール

$ npm install log4js

コンソールにログ出力

hello.js

'use strict'
const log4js = require('log4js')
const logger = log4js.getLogger();
logger.level = 'debug';

logger.debug('Hello world!');

実行しますと以下の出力が表示されます

$ node hello.js
[20YY-MM-DDThh:mm:ss.sss] [DEBUG] default - Hello world!

ログレベル

ログレベルを指定できます。

traceレベル

以下のログ全て出力します。

logger.level = 'trace';

logger.trace('trace');
logger.debug('debug');
logger.info('info');
logger.warn('warn');
logger.error('error');
logger.fatal('fatal');

debagレベル

以下のログ全て出力します。

logger.level = 'debug';

logger.debug('debug');
logger.info('info');
logger.warn('warn');
logger.error('error');
logger.fatal('fatal');

infoレベル

以下のログ全て出力します。

logger.level = 'info';

logger.info('info');
logger.warn('warn');
logger.error('error');
logger.fatal('fatal');

warnレベル

以下のログ全て出力します。

logger.level = 'warn';

logger.warn('warn');
logger.error('error');
logger.fatal('fatal');

errorレベル

以下のログ全て出力します。

logger.level = 'error';

logger.error('error');
logger.fatal('fatal');

fatalレベル

以下のログ全て出力します。

logger.level = 'fatal';

logger.fatal('fatal');

ファイルへ出力

ファイルに保存したい場合は、configure()で指定します。

'use strict'

const log4js = require('log4js')

log4js.configure({
  appenders : {
    system : {type : 'file', filename : 'system.log'}
  },
  categories : {
    default : {appenders : ['system'], level : 'debug'},
  }
});
const logger = log4js.getLogger('system');

logger.debug('Hello world!');

実行しますと何も出力されませんが、system.logが作成されています。

ファイルを開いてみる以下のように書き出されています。

$ cat system.log
[20YY-MM-DDThh:mm:ss.sss] [DEBUG] system - Hello world!

ログの使い分け

同じファイルに色々ログを入れるとわからなくなるため、ログの種類に応じて分けてみたいと思います。

'use strict'

const log4js = require('log4js')

log4js.configure({
  appenders : {
    system : {type : 'file', filename : 'system.log'},
    debug : {type : 'file', filename : 'debug.log'}
  },
  categories : {
    default : {appenders : ['system'], level : 'info'},
    debug : {appenders : ['debug'], level : 'debug'}
  }
});
const systemLogger = log4js.getLogger('system');
const debugLogger = log4js.getLogger('debug');

debugLogger.debug('Hello world! for debug');
systemLogger.info('Hello world! for system');

system.logdebug.logが作成されてログが出力されていることがわかります。

最後に

簡単ですがlog4jsを使ってみました。console.log()を使うと、ログだらけで読みにくいものになってしまいます。このモジュールを使うとデバッグ段階が終了したらwarnレベルより上のだけ出力するなど簡単に出力レベルも変更できるのでので不要なログもシャットアウトでき、ログも読みやすくなりますね。

参考

https://github.com/log4js-node/log4js-node