log4js
- node.js+express+log4jsでのアクセスログローテーション (29 Oct 2012 | Tags:
node.js+express+log4jsでのアクセスログローテーション node.js+express+log4jsでのアクセスログローテーション
謝辞
以下の記事を参考にさせていただきました。感謝です。
*【Node.js】expressでaccess log + log rotate | 湘南社中テクニカルブログ
node.jsとexpressでのアクセスログ
node.js+expressには、express標準のloggerだとログの出力先をファイルにすると、対象のファイルがずっとオープン状態になってしまう、という欠点があります。 (※:もしかしたら私が回避方法を知らないだけかもしれませんが。)
そのため、いい感じのログをファイル出力し、日次でローテーションする、というような運用ができません。
1ファイルに長々とアクセスログが出力されるようでは、運用もままならないので、log4jsを使ってexpressのアクセスログをいい感じにローテーションできるようにしたいと思います。
log4jsを使う
LoggingFrameworkのlog4jsについては、こちらで紹介しています
実際のコードはこんな感じ。※:要リファクタリング app.routerの前で、functionを入れログレベルをinfoで出力させています。
実際にexpressをスタートさせ、ブラウザからアクセスすると以下のようなログが出力されます。
access.log
[2012-10-29 23:06:18.732] [INFO] dateFile - 127.0.0.1 Mon Oct 29 2012 23:06:18 GMT+0900 (東京 (標準時)) GET / 200 - Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4 [2012-10-29 23:06:18.968] [INFO] dateFile - 127.0.0.1 Mon Oct 29 2012 23:06:18 GMT+0900 (東京 (標準時)) GET /stylesheets/style.css 200 http://localhost:3000/ Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
LinkLatest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型
Recent Books:
- node.js+log4jsで、ログローテーションする (14 Oct 2012 | Tags:
node.js+log4jsで、ログローテーションする node.js+log4jsで、ログローテーションする
インストール
まずは、環境の準備です。
npmでlog4jsをインストールします。
$ npm install log4js
ログ出力のために必要な手順
1. log4jsを読み込む
var log4js = require('log4js');
2. loggerを取得する
var logger = log4js.getLogger();
3. ログレベルを指定して、ログ出力する
logger.info('This is test.');
4.実行結果
$ node logging-sample.js [2012-10-14 14:04:49.197] [INFO] [default] - This is test.
出力形式を指定せずに実行すると、デフォルトで標準出力にログ出力されます。
ログをファイルに出力する手順
ログの出力先を標準出力からファイルに変更します。
1. appenders.jsonを生成
appenders: [{ "type": "file", "filename": "logging.log", }]
2. log4jsに設定を反映
log4js.configure({ appenders: [{ "type": "file", "filename": "logging.log", }] });
3. loggerを取得する
var logger = log4js.getLogger('file');
getLoggerの引数に、上記で設定したtypeを指定します。
4.実行結果
実行すると、プロダクトと同じ階層に”logger.log”ファイルが生成され、以下のように出力されます。
[2012-10-14 18:50:33.876] [INFO] file - This is test.
ログファイルの出力先を変更する
appendersのfilenameに、ファイルパスを含めて記載すると、出力先を任意に変更できます。
log4js.configure({ appenders: [{ "type": "file", "filename": "logs/logging.log", }] });
上記の設定で実行すると、プロダクトと同階層にある”logs”ディレクトリ配下に、”logger.log”ファイルが生成され、ログが出力されます。
ただし、パスにしていしたディレクトリは自動で生成はされないので、あらかじめディレクトリを生成しておく必要があります。
ログファイルのローテーションを設定する手順
1. appenders.jsonを生成
appenders: [{ "type": "dateFile", "filename": "logging.log", "pattern": "-yyyy-MM-dd" }]
2. log4jsに設定を反映する
log4js.configure({ appenders: [{ “type”: “dateFile”, “filename”: “logging.log”, “pattern”: “-yyyy-MM-dd” }] });
ここで設定している”pattern”は、ローテーションで生成されるログファイル名のpostfixです。
3. loggerを取得する
var logger = log4js.getLogger('dateFile');
getLoggerの引数に、上記で設定したtypeを指定します。
4. ローテーションの動作
上記設定の場合、初回起動時は”filename”の設定値の”logging.log”という名前のログファイルが生成されます。
そして午前0時に、現在の”logging.log”が、”logging.log-yyyy-MM-dd“にリネームされ新しい”logging.log”が生成されます。
patternの設定
patternの設定は、ローテーションされたファイルのpostfixになります。
patternの設定は、以下の書式が適用されます。
-
yyyy : 西暦を4桁表示します。2桁表示するには”yy”を指定します。
-
MM : 月
-
dd : 日
-
hh : 時間(24時間表示)
-
mm : 分
-
ss : 秒
-
sss : ミリ秒
-
O : タイムゾーン(大文字のOです)
これでnode.js+log4jsで、ログローテーションできるようになりました。
最後に、日次でローテーションするサンプル全コードを載せます。
この他にもlog4jsには色々な設定ができるようなので、機会を見て調べてみたいと思います。
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型
Recent Books:
-