タイトルには「log4js」と記載していますが、実際は「log4js-node」の使い方です。
npm で log4js として登録されているのは、 GitHub の log4js-node なので、ここでも 「log4js-node」 を 「log4js」 として取り上げます。
インストール から 大まかな使い方 までが理解できる程度にまとめてみました。
インストール方法
まずは プロジェクト へ log4js をインストール する方法です。
npm が利用できる コンソール を起動して、プロジェクトルートディレクトリへ移動し、以下のコマンドを実行します。
npm install log4js --save
log4js の 基本的 な 使い方
基本と(思う)使い方の例を以下にサンプルコードで掲載します。
app.js
// log4js の読み込み
var log4js = require('log4js');
// ログ出力設定
log4js.configure({
"appenders": [
{
"type": "file",
"filename": "log/system.log",
"maxLogSize": 20480,
"backups": 3,
"category": "system"
},
{
"type": "console"
}
],
"levels": {
"system": "ALL"
}
});
// ロガーの生成
var logger = log4js.getLogger('system');
// ログ出力
logger.fatal('some fatal error message.'); // [2016-07-24 23:35:46.588] [FATAL] system - some fatal error message.
logger.error('some error message.'); // [2016-07-24 23:35:46.592] [ERROR] system - some error message.
logger.warn('some warning mesage.'); // [2016-07-24 23:35:46.592] [WARN] system - some warning mesage.
logger.info('some information message.'); // [2016-07-24 23:35:46.593] [INFO] system - some information message.
logger.debug('some debug message.'); // [2016-07-24 23:35:46.593] [DEBUG] system - some message.
log4js を利用する場合、まずは require() で モジュール を読み込みます。
読み込んだ後は logjs.configure() で 設定 を行います。
設定に従って logger インスタンス を生成し、このインスタンスメソッドを利用することでログ出力を行います。
基本的な流れは log4j や log4net と同じです。
log4js の 設定ファイル の 使い方
log4js.configure(object) に渡している オブジェクト を 任意の jsonファイル ( ここでは log4js.config.json ) に吐き出して 引数 を オブジェクト からフ ァイルパス へ変更するだけです。
ファイルパスを指定する際には、読み込み元ファイル( 以下のサンプルで app.js )から 設定ファイル( 以下のサンプルで log4js.config.json ) への 相対パス または 絶対パス で指定する点に注意してください。
log4js.config.json
{
"appenders": [
{
"type": "file",
"filename": "log/system.log",
"maxLogSize": 20480,
"backups": 3,
"category": "system"
},
{
"type": "console"
}
],
"levels": {
"system": "ALL"
}
}
app.js
// log4js の読み込み
var log4js = require('log4js');
// ログ出力設定
log4js.configure('log4js.config.json');
// ロガーの生成
var logger = log4js.getLogger('system');
// ログ出力
logger.fatal('some fatal error message.'); // [2016-07-24 23:35:46.588] [FATAL] system - some fatal error message.
logger.error('some error message.'); // [2016-07-24 23:35:46.592] [ERROR] system - some error message.
logger.warn('some warning mesage.'); // [2016-07-24 23:35:46.592] [WARN] system - some warning mesage.
logger.info('some information message.'); // [2016-07-24 23:35:46.593] [INFO] system - some information message.
logger.debug('some debug message.'); // [2016-07-24 23:35:46.593] [DEBUG] system - some message.
Node.js + Express 環境 での 使い方
実際の利用を想定すると Node.js + Express 環境での利用になるかと思います。 Express の 標準ログ出力 を log4js に置き換える サンプルコード を以下に掲載します。
var express = require('express');
var log4js = require('log4js');
// Express の Application インスタンスを生成
var app = express();
// log4js を準備
log4js.configure('./log4js.config.json');
var logger = log4js.getLogger('system');
// Express の 標準ログ出力を log4js に書き換え
app.use(log4js.connectLogger(logger, {level: 'auto'}));
// テンプレートエンジンを EJS に設定
app.set('views', './views');
app.set('view engine', 'ejs');
// 静的コンテンツの公開
app.use('/public', express.static('public'));
// GET: / の処理
app.use('/', require('./routes/index.js'));
// サーバー起動
app.listen(3000);
// 起動ログ
logger.info('Server running at http://localhost:3000');
Express の 標準ログ出力 を 書き換える場合、 L12 のように app.use() の引数に log4js.connectLogger() の戻り値を与えます。
なお、log4js.connectLogger() の 第2引数 に ログレベル auto を設定すると、以下のような出力になります。
| 条件 | ログレベル |
|---|---|
| HTTPレスポンス が 3xx の場合 | WARN |
| HTTPレスポンス が 4xx または 5xx の場合 | ERROR |
| その他 | INFO |
Appender の 種類
Wikiを見る限り、以下の Appender が利用可能なようです。
- Console
- File
- DateFile
- DateFileSync
- SMTP
- Mailgun
- hook.io
- GELF
- Multiprocess
- Loggly
- Clustered
ここでは特に使いそうな Console 、 File 、 DateFile の3種類を取り上げます。
Console
コンソールにログ出力を行うアペンダーです。
{
"appenders": [
{
"type": "console",
"layout": {
"type": "pattern",
"pattern": "[%r] [%[%5.5p%]] - %m%n"
},
"category": "console"
}
]
}
- type
consoleを指定します。- layout
- ログ出力時のレイアウトを指定します。
- category
- カテゴリ名を指定します。
File
ファイルサイズでローリングを行うアペンダーです。
{
"appenders": [
{
"type": "file",
"filename": "cafeaulait.log",
"maxLogSize": 1024,
"backups": 3,
"layout": {
"type": "pattern",
"pattern": "[%r] [%[%5.5p%]] - %m%n"
},
"category": "cafeaulait"
}
]
}
- type
fileを指定します。- filename
- 出力するロのパスおよびグファイル名を指定します。
- maxLogSize
- ログファイルの最大サイズ(bytes)を指定します。
- backups
- ログファイルを保持する数を指定します。デフォルト 5。
- layout
- ログ出力時のレイアウトを指定します。
- category
- カテゴリ名を指定します。
DateFile
日付や時間で出力ファイルをローリングするアペンダーです。
{
"appenders": [
{
"type": "dateFile",
"filename": "cafelatte.log",
"pattern": "-yyyy-MM-dd",
"alwaysIncludePattern": false,
"layout": {
"type": "pattern",
"pattern": "[%r] [%[%5.5p%]] - %m%n"
},
"category": "cafelatte"
}
]
}
- type
dateFileを指定します。- filename
- 基本ファイル名を指定します。
- pattern
- ファイル名の末尾に付与するパターンを指定します。
- alwaysIncludePattern
- 日跨ぎ時に強制的にログローテートするかどうかを指定します。
- layout
- ログ出力時のレイアウトを指定します。
- category
- カテゴリ名を指定します。
Layout の 設定方法
各 Appender は layout を設定することで、出力フォーマットを制御することができます。
{
"appenders": [
{
"type": "console",
"layout": {
"type": "pattern",
"pattern": "%[%r (%x{pid}) %p %c -%] %m%n",
"tokens": {
"pid": function() { return process.pid; }
}
}
}
]
}
- type
- レイアウトの種類を指定します。
- pattern
type: "pattern"の場合、ログ出力するパターンを定義します。- tokens
pattern中で定義された「動的トークン」の実態を定義します。
type
type に指定できる値は以下の通りです。
- messagePassThrough
- basic
- colored
- pattern
おそらく普通に使うのは pattern になるかと思います。
type: "pattern" を指定すると、出力フォーマットを任意に変更することができます。
pattern 以外の出力例は以下の通りです。
| type | サンプル |
|---|---|
| messagePassThrough |
some fatal error message. some error message. some warning mesage. some information message. some debug message. |
| basic |
[2016-07-28 23:24:27.941] [FATAL] system - some fatal error message. [2016-07-28 23:24:27.944] [ERROR] system - some error message. [2016-07-28 23:24:27.946] [WARN] system - some warning mesage. [2016-07-28 23:24:27.947] [INFO] system - some information message. [2016-07-28 23:24:27.947] [DEBUG] system - some debug message. |
| colored |
[2016-07-28 23:25:00.391] [FATAL] system - some fatal error message. [2016-07-28 23:25:00.396] [ERROR] system - some error message. [2016-07-28 23:25:00.397] [WARN] system - some warning mesage. [2016-07-28 23:25:00.397] [INFO] system - some information message. [2016-07-28 23:25:00.397] [DEBUG] system - some debug message. |
pattern
pattern で利用可能な パターン は以下の通りです。
| パターン | 説明 |
|---|---|
%r |
toLocaleTimeStringで得られる「時刻」 |
%p |
「ログレベル」 |
%c |
「ログカテゴリ」 |
%h |
「ホスト名」 |
%m |
「ログデータ」 |
%d |
「日付」。以下のパターンが利用可能です。
|
%% |
「%」 |
%n |
「改行」 |
%z |
「pid」 |
%x{<トークン>} |
「動的トークン」を指定します。
動的トークンの内容は tokens パラメータで定義します。 |
%[ ~ %] |
カラーブロックの定義 |
tokens
pattern 中で指定された 動的トークン名 をキーとし、 関数 を バリュー とするハッシュオブジェクトを指定します。
指定した文字列を返す関数は、ログ出力時に呼び出されて、該当の処理結果を出力します。
参考記事