log4js のログフォーマット / Node.js + Express
以前のエントリ(Node.js + Express + log4js)ではちゃんとふれませんでしたが、log4js-node では出力フォーマットを指定することができます。そもそもデフォルトはスペース区切りで必要のない情報が出力され、必要な情報が出力されないような使えないログなので、適切にフォーマットすることをおすすめします。
ログフォーマットの指定
ログフォーマットは先述したエントリにあるとおり app.configure で app.use するときに指定すればOKです。
app.configure(function(){ log4js.configure({ 'appenders': [ { 'type': 'console' }, // console に出力 { 'type': 'file', 'filename': 'path/to/logfile', // 1024 * 1024 byte = 1MB 'maxLogSize': 1024 * 1024, 'backups': 5, // stdoutへの出力も拾う 'category': [ 'project-name', 'console' ], }, ], 'replaceConsole': true // stdoutへの出力も拾う }); var logger = log4js.getLogger('project-name'); app.use(log4js.connectLogger(logger, { 'level': log4js.levels.DEBUG, // アクセスログを出力する際に無視する拡張子 'nolog': [ '\\css', '\\.js', '\\.gif' ], // アクセスログのフォーマット(以下はデフォルト出力) 'format': ':remote-addr - - ":method :url HTTP/:http-version" :status :content-length ":referrer" ":user-agent"' })); app.use(app.router); });
ここで log4js.connectLogger に渡しているオプション format に文字列としてフォーマットを渡すことになります。
オプション format に指定できるのはソース(https://github.com/nomiddlename/log4js-node/blob/master/lib/connect-logger.js#L10) からも確認できるように
- `:req[header]` ex: `:req[Accept]` - `:res[header]` ex: `:res[Content-Length]` - `:http-version` - `:response-time` - `:remote-addr` - `:date` - `:method` - `:url` - `:referrer` - `:user-agent` - `:status`
です。コードを見てわかるとおり、単純に String#replace しているだけなので、例えば :methodo と指定すると GETo や POSTo が出力されます。
せっかくの JavaScript ですので、JSON フォーマットで出力してみます。出力するデータは適宜調整してください(req[header] や res[header] は実際に request/response オブジェクトから取得できるデータならなんでもOKなので、console.log(request) / console.log(response) してみて、出力するデータを決めるといいかもしれません。response の中に request がいたりしてうっとうしいですが)
app.use(log4js.connectLogger(logger, { 'level': log4js.levels.DEBUG, // アクセスログを出力する際に無視する拡張子 'nolog': [ '\\css', '\\.js', '\\.gif' ], // アクセスログのフォーマット(JSON 形式) 'format': JSON.stringify({ 'remote-addr': ':remote-addr', 'method': ':method', 'url': ':url', 'http-version': ':http-version', 'status': ':status', 'content-length': ':content-length', 'referrer': ':referrer', 'user-agent': ':user-agent' }) }));
参考
log4js-node GitHub https://github.com/nomiddlename/log4js-node