Node.js
log4js

log4jsの覚え書き - log4.jsを使ってみた -

More than 3 years have passed since last update.

log4jsはjavascriptのログ出力モジュールです。


log4jsをインストールする

$ npm install log4js


ログ出力設定ファイルを作成する


log-config.json

{

"appenders": [
{
"type": "dateFile",
"category": "system",
"filename": "logs/system.log",
"pattern": "-yyyy-MM-dd"
},
{
"type": "dateFile",
"category": "access",
"filename": "logs/access.log",
"pattern": "-yyyy-MM-dd"
},
{
"type": "dateFile",
"category": "error",
"filename": "logs/error.log",
"pattern": "-yyyy-MM-dd"
}
}


  • appenders

    ログの出力処理の指定。ログの出力方式を配列で複数指定可能。


  • type

    ログの出力タイプを指定。



説明

file
ファイルに書き出す。

datefile
日付毎にローテーションしてファイルに書き出す。

console
コンソールに書き出す。


  • category

    出力するログのカテゴリ。カテゴリ毎に出力内容を分けることができる。


  • filename

    ログの出力先(ファイル名)


  • pattern

    ファイルの出力パターン


書式
説明

yyyy
西暦を4桁

yy
西暦2桁

MM

dd

hh
時間(24時間表示)

mm

ss

sss
ミリ秒

O
タイムゾーン

上の例では、filenameが"system.log"でpatternが”-yyyy-MM-dd”なのでローテーションのタイミング(AM:0:00)でsystem-yyyy-MM-dd.logになります。

$ ls logs

access.log error.log system.log
access.log-2014-11-29 error.log-2014-11-29 system.log-2014-11-29


ログを出力してみる

作成したapp.jsは以下です。

var Log4js = require('log4js');

// 設定ファイル(log-config.json)の読み込み
Log4js.configure('log-config.json');

// ログ出力
var systemLogger = Log4js.getLogger('system');
var accessLogger = Log4js.getLogger('access');
var errorLogger = Log4js.getLogger('error');

// Informationログを出力する
systemLogger.info('this is system log!!!');
accessLogger.info('this is access log!!!');
errorLogger.info('this is error log!!!');

$ ls logs          まだファイルは作成されていない

$ node app.js 上記で作成したapp.jsを実行
$ ls logs ログファイルが作成されている
access.log error.log system.log

作成されたログファイルは次の通り。


/logs/system.log

[2014-11-29 01:44:54.322] [INFO] system - this is system log!!!



logs/access.log

[2014-11-29 01:44:54.324] [INFO] access - this is access log!!!



error.log

[2014-11-29 01:44:54.324] [INFO] error - this is error log!!!



ログレベルに応じたログ出力

log4jsではFATAL、ERROR、WARN、INFO、DEBUG、TRACEのログ出力ができる。

var Log4js = require('log4js');

// 設定ファイル(log-config.json)の読み込み

Log4js.configure('log-config.json');

// ログ出力
var systemLogger = Log4js.getLogger('system');

// Fatalログを出力する
systemLogger.fatal('this is system log!!!');
// Errorログを出力する
systemLogger.error('this is system log!!!');
// Warningログを出力する
systemLogger.warn('this is system log!!!');
// Informationログを出力する
systemLogger.info('this is system log!!!');
// Debugログを出力する
systemLogger.debug('this is system log!!!');

// traceログを出力する
systemLogger.trace('this is system log!!!');

実際に出力するとこんな感じになります。


system.log

[2014-11-29 21:16:34.628] [FATAL] system - this is system log!!!

[2014-11-29 21:16:34.630] [ERROR] system - this is system log!!!
[2014-11-29 21:16:34.630] [WARN] system - this is system log!!!
[2014-11-29 21:16:34.630] [INFO] system - this is system log!!!
[2014-11-29 21:16:34.630] [DEBUG] system - this is system log!!!
[2014-11-29 21:16:34.631] [TRACE] system - this is system log!!!


出力するログレベルを設定するには、設定ファイルにlevelsプロパティを設定できます。


log-config.json

{

"appenders": [
{
"type": "dateFile",
"category": "system",
"filename": "logs/system.log",
"pattern": "-yyyy-MM-dd"
}
],
"levels": {"system": "INFO"} ココ
}

これで実行すると、category = "system"ののログがINFOレベル以上のログになります。


system.log

[2014-11-29 23:12:49.403] [FATAL] system - this is system log!!!

[2014-11-29 23:12:49.406] [ERROR] system - this is system log!!!
[2014-11-29 23:12:49.406] [WARN] system - this is system log!!!
[2014-11-29 23:12:49.407] [INFO] system - this is system log!!!

指定できるログレベルは以下の様です。

ログレベル
説明

OFF
ログファイルにログを出力ません。

FATAL
FATAL以上のレベルのログを出力。

ERROR
ERROR以上のレベルのログを出力。

WARN
WARN以上のレベルのログを出力。

INFO
INFO以上のレベルのログを出力。

DEBUG
DEBUG以上のレベルのログを出力。

TRACE
TRACE以上のレベルのログを出力。

ALL
全てのログレベルの出力を行う


コンソールにログを出力する。

appendersに「type:console」で追記します。


log-config.json

{

"appenders": [
{
"type": "dateFile",
"category": "system",
"filename": "logs/system.log",
"pattern": "-yyyy-MM-dd"
},
{
"type": "dateFile",
"category": "access",
"filename": "logs/access.log",
"pattern": "-yyyy-MM-dd"
},
{
"type": "dateFile",
"category": "error",
"filename": "logs/error.log",
"pattern": "-yyyy-MM-dd"
},
{ "type": "console" } ←ココ追加
],
"levels": {"system": "DEBUG"}
}

実行するとこんな感じで出力されます。

$ node app.js

[2014-11-29 23:31:05.041] [FATAL] system - this is system log!!!
[2014-11-29 23:31:05.043] [FATAL] access - this is access log!!!
[2014-11-29 23:31:05.043] [FATAL] error - this is error log!!!
[2014-11-29 23:31:05.044] [ERROR] system - this is system log!!!
[2014-11-29 23:31:05.044] [ERROR] access - this is access log!!!
[2014-11-29 23:31:05.044] [ERROR] error - this is error log!!!
[2014-11-29 23:31:05.044] [WARN] system - this is system log!!!
[2014-11-29 23:31:05.044] [WARN] access - this is access log!!!
[2014-11-29 23:31:05.044] [WARN] error - this is error log!!!
[2014-11-29 23:31:05.045] [INFO] system - this is system log!!!
[2014-11-29 23:31:05.045] [INFO] access - this is access log!!!
[2014-11-29 23:31:05.045] [INFO] error - this is error log!!!
[2014-11-29 23:31:05.045] [DEBUG] system - this is system log!!!
[2014-11-29 23:31:05.045] [DEBUG] access - this is access log!!!
[2014-11-29 23:31:05.045] [DEBUG] error - this is error log!!!
[2014-11-29 23:31:05.046] [TRACE] access - this is access log!!!
[2014-11-29 23:31:05.047] [TRACE] error - this is error log!!!

replaceConsoleプロパティを追加すると、console.logで出力した内容がログ形式になります。

replaceConsoleプロパティ追加前

[2014-11-29 23:38:50.833] [TRACE] error - this is error log!!!

ログ出力のテスト!!!

replaceConsoleプロパティ追加


log-config.josn

{

"appenders": [
{
"type": "dateFile",
"category": "system",
"filename": "logs/system.log",
"pattern": "-yyyy-MM-dd"
},
{
"type": "dateFile",
"category": "access",
"filename": "logs/access.log",
"pattern": "-yyyy-MM-dd"
},
{
"type": "dateFile",
"category": "error",
"filename": "logs/error.log",
"pattern": "-yyyy-MM-dd"
},
{ "type": "console" }
],
"levels": {"system": "DEBUG"},
"replaceConsole": true ← ココ追加
}

実行すると、こんな感じです。

[2014-11-29 23:41:14.642] [TRACE] error - this is error log!!!

[2014-11-29 23:41:14.642] [INFO] console - ログ出力のテスト!!!


設定ファイルのリロード時間を設定

設定ファイルの読み込み部分を次の様に変更すると指定した時間(秒単位)でリロードしてくれる様になります。ここでは60秒毎にリロードします。

Log4js.configure('log-config.json', { reloadSecs: 60 });


設定ファイルの最大サイズやバックアップ数を指定する。

最大ログサイズの指定やバックアップ数も指定できる様です。


  • maxLogSize

    ファイルの最大ファイルサイズ(単位:byte)


  • backups

    バックアップ数


どうも、appendersのtypeがfileの時に機能するみたいです。


log-config.json

{

"appenders": [
{
"type": "file",
"category": "system",
"maxLogSize": 1048576,
"backups": 3,
"filename": "logs/system.log"
},
{
"type": "dateFile",
"category": "access",
"filename": "logs/access.log",
"pattern": "-yyyy-MM-dd"
},
{
"type": "dateFile",
"category": "error",
"filename": "logs/error.log",
"pattern": "-yyyy-MM-dd"
},
{ "type": "console" }
],
"levels": {"system": "INFO"},
"replaceConsole": true
}


expressとのログの統合

expressの設定時に次の内容を追記すれば良い様です。

Log4js = require('log4js');

:
:

Log4js.configure Config.log.configure
logger = Log4js.getLogger 'system'

app = express()
:
:

app.use(log4js.connectLogger(logger));
// app.use(Log4js.connectLogger(logger, { level: Log4js.levels.INFO }));