タイトルには「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
中で指定された 動的トークン名 をキーとし、 関数 を バリュー とするハッシュオブジェクトを指定します。
指定した文字列を返す関数は、ログ出力時に呼び出されて、該当の処理結果を出力します。
参考記事
- GitHub - nomiddlename/log4js-node
- GitHub - nomiddlename/log4js-node - Wiki
- Qiita - log4jsの覚え書き - log4.jsを使ってみた -
- Qiita - [Node.js]Express4 + log4jsでロギング
- YoheiM.NET - [Nodejs] Express+Log4jsで実践的なログ出力を行う
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!