log4js-nodeのおさらい
なんとなくで使い始めたlog4js、改めておさらいをしておく。
log4js-nodeってなんだろう
Node.jsでlogをとるときに便利なフレームワーク。Javaで使われていたLog4J、それをJavaScript用に実現したLog4jsをNode.js向けにしたものがlog4js-node。npm install
する際にはnpm install log4js
と書き、-node
の部分はつけなくていい。
log4js-nodeでできること
たとえば、下記のようなことができる。
- consoleに色付きでログを出力させる
- Node.jsの
console.log
をおきかえる - ファイルサイズや日付でログをわける
使ってみる
log4js.getLogger
でloggerを用意して、logger.debug
関数でログを記述していく。
var log4js = require('log4js'); var logger = log4js.getLogger(); logger.debug("Some debug messages");
日付とDEBUG
とdefault
の部分に色がついてconsoleに表示される。
$ node log4js_test.js [2017-01-06 17:29:46.544] [DEBUG] [default] - Some debug messages
ファイルに記録させる
console出力だけじゃなく、logファイルに書き出ささせることができる。
var log4js = require('log4js'); log4js.loadAppender('file'); log4js.addAppender(log4js.appenders.file('logs/console.log')); var logger = log4js.getLogger(); logger.debug("Some debug messages");
$ node log4js_test.js [2017-01-06 17:37:15.824] [DEBUG] [default] - Some debug messages $ ls logs/ console.log $ cat logs/console.log [2017-01-06 17:37:15.824] [DEBUG] [default] - Some debug messages
ログレベルをわけることができる
debugログ以外のログレベルも利用できる。
- trace
- debug
- info
- warn
- error
- fatal
var log4js = require('log4js'); log4js.loadAppender('file'); log4js.addAppender(log4js.appenders.file('logs/console.log')); var logger = log4js.getLogger(); // 実際にログを出力してみる logger.trace('traceログです'); logger.debug('デバッグログです'); logger.info('infoログです'); logger.warn('警告です'); logger.error('エラーがでました'); logger.fatal('致命的な問題です');
出力がカラフルでとてもかわいい。
$ node log4js_test.js [2017-01-06 17:41:48.087] [TRACE] [default] - traceログです [2017-01-06 17:41:48.093] [DEBUG] [default] - デバッグログです [2017-01-06 17:41:48.094] [INFO] [default] - infoログです [2017-01-06 17:41:48.094] [WARN] [default] - 警告です [2017-01-06 17:41:48.094] [ERROR] [default] - エラーがでました [2017-01-06 17:41:48.094] [FATAL] [default] - 致命的な問題です
低いレベルのログを無視する
setLevel
を使うと、どのレベル以上のログを表示するか設定できる。
var log4js = require('log4js'); log4js.loadAppender('file'); log4js.addAppender(log4js.appenders.file('logs/console.log')); // loggerを用意する var logger = log4js.getLogger(); logger.setLevel('ERROR'); // 実際にログを出力してみる logger.trace('traceログです'); logger.debug('デバッグログです'); logger.info('infoログです'); logger.warn('警告です'); logger.error('エラーがでました'); logger.fatal('致命的な問題です');
この場合はlogger.setLevel('ERROR');
で、error
とfatal
のほかが無視されている。
$ node log4js_test.js [2017-01-06 17:45:06.062] [ERROR] [default] - エラーがでました [2017-01-06 17:45:06.069] [FATAL] [default] - 致命的な問題です $ cat logs/console.log [2017-01-06 17:45:06.062] [ERROR] [default] - エラーがでました [2017-01-06 17:45:06.069] [FATAL] [default] - 致命的な問題です
設定をまとめて書く
var log4js = require('log4js'); log4js.loadAppender('file'); log4js.addAppender(log4js.appenders.file('logs/console.log'));
この部分をまとめて記述することができる。{type: 'console'}
を外すとconsole出力がなくなる。{type: 'file', filename: 'logs/console.log'}
を外すとファイル出力がなくなる。
var log4js = require('log4js'); log4js.configure({ appenders: [ {type: 'console'}, {type: 'file', filename: 'logs/console.log'} ] });
この設定は外部ファイルに記述することもできる。これが使いやすそう。
var log4js = require('log4js'); log4js.configure('config/log4js.json'); // loggerを用意する var logger = log4js.getLogger(); logger.setLevel('ERROR'); // 実際にログを出力してみる logger.trace('traceログです'); logger.debug('デバッグログです'); logger.info('infoログです'); logger.warn('警告です'); logger.error('エラーがでました'); logger.fatal('致命的な問題です');
{ "appenders": [{ "type": "console" }, { "type": "file", "filename": "logs/console.log" } ] }
Nodeのconsole.log上書き
標準だとconsole.log
は上書きされない。
var log4js = require('log4js'); log4js.configure('config/log4js.json'); // loggerを用意する var logger = log4js.getLogger(); logger.setLevel('ERROR'); // 実際にログを出力してみる console.error('Node.jsのconsole.errorです');
$ node log4js_test.js Node.jsのconsole.errorです
Nodeのconsole.log
を上書き利用する場合は、replaceConsole
の設定をする。
{ "appenders": [{ "type": "console" }, { "type": "file", "filename": "logs/console.log" } ], "replaceConsole": true }
これで、Node.jsのconsole
で書かれたlogをlog4jsで扱えるようになる。
$ node log4js_test.js [2017-01-06 18:33:15.227] [ERROR] console - Node.jsのconsole.errorです
logのカテゴリーをわける
たとえば送信時と受信時のlogをわけて保存したい場合。 まず、カテゴリーごとに保存先を指定しておく。
{ "appenders": [{ "type": "console" }, { "type": "file", "filename": "logs/console_send.log", "category": "send" }, { "type": "file", "filename": "logs/console_receive.log", "category": "receive" } ], "replaceConsole": true }
カテゴリーの指定を変えてlogger
を用意しておく。
var log4js = require('log4js'); log4js.configure('config/log4js.json'); // loggerを用意する var loggerSend = log4js.getLogger('send'); var loggerReceive = log4js.getLogger('receive'); // 実際にログを出力してみる loggerSend.info('サーバーがメッセージを送信しました'); loggerReceive.info('サーバーがメッセージを受信しました');
この結果、loggerSend
とloggerReceive
で保存先が変わる。
$ node log4js_test.js [2017-01-06 19:25:33.099] [INFO] send - サーバーがメッセージを送信しました [2017-01-06 19:25:33.108] [INFO] receive - サーバーがメッセージを受信しました $ cat logs/console_send.log [2017-01-06 19:25:33.099] [INFO] send - サーバーがメッセージを送信しました $ cat logs/console_receive.log [2017-01-06 19:25:33.108] [INFO] receive - サーバーがメッセージを受信しました
日付ごとにファイルを変える
例えばpatternとして-yyyy-MM-dd
を指定をすると、日付が変わる際にログファイルの末尾に-yyyy-MM-dd
が付与される。
{ "appenders": [{ "type": "console" }, { "type": "dateFile", "filename": "logs/console.log", "pattern": "-yyyy-MM-dd" } ], "replaceConsole": true }
expressと使う場合にはexpressのlogもlog4jsで扱うことができる
Connect Logger · nomiddlename/log4js-node Wiki · GitHub
最後に
log4js-nodeについてざっと振り返りをした。他にも設定できる項目があるので、使いながらくわしい動きを調べていきたい。