タイトルには「log4js」と記載していますが、実際は「log4js-node」の使い方です。
npm
で log4js
として登録されているのは、 GitHub の log4js-node
なので、ここでも 「log4js-node」 を 「log4js」 として取り上げます。
インストール から 大まかな使い方 までが理解できる程度にまとめてみました。
インストール方法
まずは プロジェクト へ log4js をインストール する方法です。
npm
が利用できる コンソール を起動して、プロジェクトルートディレクトリへ移動し、以下のコマンドを実行します。
1 | npm install log4js --save |
log4js の 基本的 な 使い方
基本と(思う)使い方の例を以下にサンプルコードで掲載します。
app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | // 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { "appenders" : [ { "type" : "file" , "filename" : "log/system.log" , "maxLogSize" : 20480, "backups" : 3, "category" : "system" }, { "type" : "console" } ], "levels" : { "system" : "ALL" } } |
app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // 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 に置き換える サンプルコード を以下に掲載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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); // 起動ログ |
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
コンソールにログ出力を行うアペンダーです。
1 2 3 4 5 6 7 8 9 10 11 12 | { "appenders" : [ { "type" : "console" , "layout" : { "type" : "pattern" , "pattern" : "[%r] [%[%5.5p%]] - %m%n" }, "category" : "console" } ] } |
- type
console
を指定します。- layout
- ログ出力時のレイアウトを指定します。
- category
- カテゴリ名を指定します。
File
ファイルサイズでローリングを行うアペンダーです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { "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
日付や時間で出力ファイルをローリングするアペンダーです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { "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
を設定することで、出力フォーマットを制御することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "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 の フォロー」 お願いします!!