こんにちわ、きよあきです。
今までjavaを使うことが多くて、ログの出力にはlog4jしか使ったことがなかったのですが、今の現場ではnode.jsを使用していて、log4jsというのを使うことになったので使用方法を備忘録としてまとめておこうと思います。
参考サイトはこちらです。
log4jsとは
log4jsとはjavaScriptで使用できるログ出力ライブラリです。
システムでは、エラーや障害が発生したときに原因を調査するためにログをファイルに出力して、どのような処理が行われたか、どのようなエラーが発生したかなどを確認できるようにしておきます。
log4jsではINFO、WARN、ERROR、DEBUGといったレベルで使い分けたり、複数ファイルに出力したり、ログローテーションといって何日分のログファイルを残しておくのかなどを設定することができます。
log4jsの使い方
インストール
下記のnpmコマンドでインストールします。
npm install log4js
設定ファイル
log4js用の設定ファイルを作成します。ファイル名や配置場所は任意で問題ありません。
今回はファイル名「log-config.json」として作成します。
{
"appenders": {
"console": {
"type": "console",
"layout": {
"type": "pattern",
"pattern": "[%d] [%-5p] %-6c [%X{sessionid}] -%m"
}
}
},
"categories": {
"default": {
"appenders": ["console"],
"level": "debug"
}
}
}
「appenders」には、ログ出力のオブジェクト定義をします。
オブジェクト定義の名称を「console」とし、配下にログ出力の設定をします。
今回typeには「console」を指定します。これでログがコンソールに出力されます。
layoutにはログ出力の出力内容を出力ルールを設定します。
layout配下のtypeを「pattern」とし、patternに「[%d] [%-5p] %-6c [%X{sessionid}] -%m」を設定します。
patternの設定ルールは以下です。
- %d: 日時
「yyyy-MM-ddThh:mm:ss.SSS」
- %p: ログレベル(INFO、WARN、ERRORなど)
- %c: ログカテゴリ (categoriesに設定したカテゴリ名)
- %X{sessionid}: sessionidというパラメータを受け取り表示する
- %m: メッセージ
※数字は右詰めパディングを意味します。(例:-5は左詰め桁を意味します。)
次にcategoriesにイベントを定義します。
defaultオブジェクトを定義し、appendersにconsoleオブジェクトを設定します。
defaultは必須で設定する必要があります。
levelにはdebugを指定しています。debug以上のログレベルのログを出力します。
ログレベルは下記が存在します。
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF
実行ソース
次にログを出力する実行ソースを説明します。
// log4jsライブラリの呼び出し
const Log4js = require("log4js");
// 設定ファイルの読み込み
Log4js.configure("./config/log4js-config.json");
// ログカテゴリ名を指定してインスタンス生成
// 引数を指定しない場合、defaultが設定される
const logger = Log4js.getLogger();
logger.addContext("sessionid", "sessionid");
logger.info("login API start");
実際にログ出力したサンプルの内容が下記となります。
[2022-07-17T21:08:35.894] [INFO ] system [sessionid] -login API start
ファイル出力
次にコンソール出力だけではなく、ログをファイル出力する方法を紹介します。
設定ファイル
下記のようにログ出力したい内容や分類によってファイルを分けることもできます。
{
"appenders": {
"access": {
"type": "dateFile",
"filename": "logs/access.log",
"numBackups": 30,
"compress": true,
"pattern": "yyyyMMdd",
"layout": {
"type": "pattern",
"pattern": "[%d] [%-5p] %-6c [%X{sessionid}] -%m"
}
},
"system": {
"type": "dateFile",
"filename": "logs/system.log",
"numBackups": 30,
"compress": true,
"pattern": "yyyyMMdd",
"layout": {
"type": "pattern",
"pattern": "[%d] [%-5p] %-6c [%X{sessionid}] -%m"
}
},
"sql": {
"type": "dateFile",
"filename": "logs/sql.log",
"numBackups": 30,
"compress": true,
"pattern": "yyyyMMdd",
"layout": {
"type": "pattern",
"pattern": "[%d] [%-5p] %-6c [%X{sessionid}] -%m"
}
},
"console": {
"type": "console",
"layout": {
"type": "pattern",
"pattern": "[%d] [%-5p] %-6c [%X{sessionid}] -%m"
}
}
},
"categories": {
"default": {
"appenders": ["system", "console"],
"level": "debug"
},
"access": {
"appenders": ["access", "console"],
"level": "info"
},
"system": {
"appenders": ["system", "console"],
"level": "debug"
},
"sql": {
"appenders": ["sql", "console"],
"level": "info"
}
}
}
実行ソース
// log4jsライブラリの呼び出し
const Log4js = require("log4js");
// 設定ファイルの読み込み
Log4js.configure("./config/log4js-config.json");
// ログカテゴリ名を指定してインスタンス生成
// 引数を指定しない場合、defaultが設定される
const logger = Log4js.getLogger("system"); //systemを引数に指定
logger.addContext("sessionid", "sessionid");
logger.info("login API start");
以上です。
コメント