【備忘録】node.jsでlog4jsのログを出力する方法

プログラミング

こんにちわ、きよあきです。

今までjavaを使うことが多くて、ログの出力にはlog4jしか使ったことがなかったのですが、今の現場ではnode.jsを使用していて、log4jsというのを使うことになったので使用方法を備忘録としてまとめておこうと思います。

参考サイトはこちらです。

[NodeJS] log4js でログをいい感じに出力する方法
目次 1. log4js とは2. log4js の使い方2.1. インストール2.2. 使い方2.3. 用語の意味2.3.1. Level2.3.2. Appenders2.3.3. Category3. ファイルに出力する方法4. 複数
log4js-node の使い方【v5.2.2】 - Qiita
1. はじめに log4js-nodeは、log4js を javascript 用に移植した log4js を node 用に書き直したものらしい。 Java の log4j とは大きく違うとのこと。 ロガーの使い方がいまいち...
【Node.js入門】ログ(logger)の管理を効率化するlog4js-nodeの使い方まとめ! | 侍エンジニアブログ
この記事では「 【Node.js入門】ログ(logger)の管理を効率化するlog4js-nodeの使い方まとめ! 」といった内容について、誰でも理解できるように解説します。この記事を読めば、あなたの悩みが解決するだけじゃなく、新たな気付きも発見できることでしょう。お悩みの方はぜひご一読ください。

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");

以上です。

コメント

タイトルとURLをコピーしました