log4js とは
log4js-node/log4js-node: A port of log4js to node.js
log4js というログ出力用のフレームワークがあります。これを使うとNodeJS上からログをいい感じに出力できるようになります。
console.log()
を使うよりも見やすくコンソールに出力できるほか、以下のような機能をサポートしています。
- stdout, stderr への色付き出力
- ログローテーション
- Expressサーバーのロガー
- ログメッセージのレイアウト
- ログカテゴリやログレベルのカスタマイズ
log4js の使い方
インストール
$ npm install log4js
npm でインストールします。
使い方
まず、ロガーの設定を行います。最初はコンソールにログを吐く設定を行ってみます。
log-config.json
という名前で設定用のJSONファイルを作成します。
{
"appenders": {
"console": {
"type": "console",
"level": "all"
}
},
"categories": {
"default": {
"appenders": [
"console"
],
"level": "all"
}
}
}
index.js
ファイルを作成し、以下のようにしてみます。
const Log4js = require("log4js");
Log4js.configure("log-config.json");
const logger = Log4js.getLogger("system");
logger.info("infoです。。。");
logger.error("エラーです。。。");
やっていることは設定ファイルを読み込み、getLogger()
でロガーを作成しています。
あとは作成したロガーでログレベル(info や error, warn など)を指定してログを出力できます。
[2020-01-22T22:58:19.426] [INFO] system - infoです。。。
[2020-01-22T22:58:19.430] [ERROR] system - エラーです。。。
コンソールにはいい感じに色付きで出てきます。
用語の意味
用語の意味が上のページに載っています。
Level
レベルはログの重要度または優先度を意味します。カテゴリやAppenderがログのレベルを判定して、処理されるかどうかを決めます。
- all
- trace
- debug
- info
- warn
- error
- fatal
- off
ログレベルは順番に並べると上のようになります。設定したレベルより下にあるレベルのログはすべて出力されます。
“all” を設定するとすべてのレベルのログが出力されます。”error” を設定すると “error”, “fatal” だけが出力されます。
Appenders
ログの出力を担当します。ログの出力先や出力するログのレベルを変更したりできます。
Category
Appender をグループ化します。これはモジュール単位などで分けて使ったりします。(例:「auth」「payment」「http」)
カテゴリで設定されたすべてのAppenderにログが送られます。
ファイルに出力する方法
例えば、すべてのログをコンソールに出しつつ、同時にファイルにもログを出力できるようにします。
{
"appenders": {
"console": {
"type": "console"
},
"system": {
"type": "dateFile",
"filename": "log/system.log",
"pattern": "-yyyy-MM-dd"
}
},
"categories": {
"default": {
"appenders": [
"console",
"system"
],
"level": "all"
}
}
}
別の出力方法を設定する場合には、別の appender
を設定します。これをデフォルトのカテゴリに入れておけば、いい感じに処理されます。
pattern
でファイル名を日付にして適宜バックアップしてくれます。
index.js で出力してみます。
const Log4js = require("log4js");
Log4js.configure("log-config.json");
const logger = Log4js.getLogger("system");
logger.info("infoです。。。");
logger.error("エラーです。。。");
コンソールは先ほどと変わらず両方出力されます。同時にコンソールに出力された内容と同様に以下の内容が /log/system.log
ファイルに出力されます。
[2020-01-23T00:04:52.991] [INFO] system - infoです。。。
[2020-01-23T00:04:52.995] [ERROR] system - エラーです。。。
複数のイベントで出力を使い分ける
ファイルに出力するときに、エラーのログと通常のログを分けて出力したい場合は、カテゴリで分けるといい感じです。
{
"appenders": {
"console": {
"type": "console"
},
"system": {
"type": "dateFile",
"filename": "log/system.log",
"pattern": "-yyyy-MM-dd"
},
"error": {
"type": "dateFile",
"filename": "log/error.log",
"pattern": "-yyyy-MM-dd"
}
},
"categories": {
"default": {
"appenders": [
"console",
"system"
],
"level": "all"
},
"error": {
"appenders": [
"console",
"error"
],
"level": "warn"
}
}
}
カテゴリでエラー出力用のイベントを作成し、”appender” でエラー出力用の設定を指定すれば、別のファイルに出力できます。
const Log4js = require("log4js");
Log4js.configure("log-config.json");
const logger = Log4js.getLogger("system");
logger.info("infoです。。。");
logger.error("エラーです。。。");
// エラー用
const errorLogger = Log4js.getLogger("error");
errorLogger.error("error.log に出力されます。");
getLogger("xxxx")
でカテゴリ名を指定すると、対応するロガーを作成できます。カテゴリが存在しないときはデフォルトのカテゴリが選ばれます。
別のインターフェースでロガーが使えて便利です。
実行するとコンソール出力は以下のようになります。コンソール出力はどちらのカテゴリにも含んでいるのですべて出ます。
[2020-01-24T00:15:58.473] [INFO] system - infoです。。。
[2020-01-24T00:15:58.476] [ERROR] system - エラーです。。。
[2020-01-24T00:15:58.477] [ERROR] error - error.log に出力されます。
/log/system.log
には system の行だけが、/log/error.log
には error の行だけが出力されています。
以上。
コメントを書く