概要
log4jsを使ってログ出力、フォーマットの変更、ファイル出力、ログローテーション等を行う。
バージョン情報
- node v10.15.1
- log4js@5.1.0
インストール
$ npm i log4js
コンソールへのログ出力
ログレベルをinfoに設定してログを出力してみる。
const log4js = require('log4js') const logger = log4js.getLogger(); logger.level = 'info'; logger.debug('debug'); logger.info('info'); logger.warn('warn'); logger.error('error');
出力結果
ログレベル
ログレベルには下記が指定できる。
- all
- trace
- debug
- info
- warn
- error
- fatal
- off
allだとすべて表示、offだとfatalであれなんであれすべて表示しなくなる。
出力ログのフォーマットを指定する
参考ページ : https://github.com/log4js-node/log4js-node/blob/master/docs/layouts.md
const log4js = require('log4js') log4js.configure({ appenders: { out: { type: 'stdout', layout: { type: 'pattern', pattern: '%d{yyyy-MM-dd hh:mm:ss} %p %c %m' }} }, categories: { default: { appenders: ['out'], level: 'info' } } }); const logger = log4js.getLogger(); logger.debug('debug'); logger.info('info'); logger.warn('warn'); logger.error('error'); logger.fatal('fatal');
実行結果
2019-09-27 18:48:17 INFO default info 2019-09-27 18:48:17 WARN default warn 2019-09-27 18:48:17 ERROR default error 2019-09-27 18:48:17 FATAL default fatal
よく使いそうな項目
パターン | 意味 | 例 |
---|---|---|
%d{yyyy-MM-dd hh:mm:ss} | 日時 | 2019-09-27 18:48:17 |
%r | 時間 | 18:48:17 |
%p | ログレベル | INFO |
%c | ログカテゴリ | default |
%h | ホスト名 | |
%m | ログメッセージ | |
%n | 改行 | |
%p | プロセスID | |
%f | ファイル名(enableCallStack: true指定時) | /home/user/filename.js |
%f{n} | ファイル名(n階層) | filename.js |
%l | 行番号 | 10 |
%[ ... %] | 囲まれた区間がカラーブロックになる |
ファイル名、行番号、日時、ログレベル、メッセージが表示される例。
pattern: '%[%f{1}:%l %d{yyyy-MM-dd} %r %p %m %]'
configをjsonで記述する
適当なファイル名でjsonファイルを作る。(仮にlog4js_example.jsonとする)
{ "appenders": { "out": { "type": "stdout", "layout": { "type": "pattern", "pattern": "%d{yyyy-MM-dd hh:mm:ss} %p %c %m" }} }, "categories": { "default": { "appenders": ["out"], "level": "info" } } }
jsonファイルを読み込んでログ出力。
const log4js = require('log4js') log4js.configure('log4js_example.json'); const logger = log4js.getLogger(); logger.info('info');
ファイル出力
ログをファイル出力する場合は、typeをfileにし、filenameを記述する。
log4js.configure({ appenders: { out: { type: 'file', filename: 'logs/foo.log', layout: { type: 'pattern', pattern: '%f{1}:%l %d{yyyy-MM-dd} %r %p %m' }} }, categories: { default: { appenders: ['out'], level: 'info', enableCallStack: true } } });
これで指定したfilenameのパスにログが出力される。
ファイルのローテート
typeにdateFileを指定し、patternに日付フォーマットを入れるとファイルのローテートができる。
下記は動きが確認しやすいように1分ごとにローテートする処理を入れている。
log4js.configure({ appenders: { out: { type: 'dateFile', filename: 'logs/foo.log', pattern: '-yyyy-MM-ddThh-mm', layout: { type: 'pattern', pattern: '%f{1}:%l %d{yyyy-MM-dd} %r %p %m' } } }, categories: { default: { appenders: ['out'], level: 'info', enableCallStack: true } } });
これを時間を置きながら叩くと下記のように日時が付加されたファイル名でログファイルが生成されている。
foo.log foo.log.-2019-09-27T19-37 foo.log.-2019-09-27T19-38 foo.log.-2019-09-27T19-41
info以上をconsoleに、warn以上をファイルに出力する
info以上はconsoleに出力し、warn以上であればファイルにも出力する設定。
file向けのappendersに指定した後、logLevelFilterというtypeでログレベルのフィルタを設定している。
これを実行するとコンソールにはinfo以降が、ログファイルにはwarn以降が出力される。
log4js.configure({ appenders: { stdout: { type: 'console', layout: { type: 'pattern', pattern: '%[%f{1}:%l %d{yyyy-MM-dd} %r %p %m %]' } }, file: { type: 'dateFile', filename: 'logs/foo.log', pattern: '-yyyy-MM-dd', layout: { type: 'pattern', pattern: '%f{1}:%l %d{yyyy-MM-dd} %r %p %m' }, }, warn_file: { type: 'logLevelFilter', appender: 'file', level: 'warn' } }, categories: { default: { appenders: ['stdout', 'warn_file'], level: 'info', enableCallStack: true } } });
改定履歴
Author: Masato Watanabe, Date: 2019-10-03, 記事投稿