Node.js のログは、直接コンソールに出力されます。ログデータの収集およびトラブルシューティングには不便です。Log4js を使用すると、ログをファイルに出力し、ログフォーマットをカスタマイズすることができます。データの収集にも運用にも便利です。

var log4js = require('log4js');
log4js.configure({
  appenders: [
    {   
      type: 'file', //file output
      filename: 'logs/access.log', 
      maxLogSize: 1024,
      backups:3,
      category: 'normal' 
    }   
  ]
});
var logger = log4js.getLogger('normal');
logger.setLevel('INFO');
logger.info("this is a info msg");
logger.error("this is a err msg");

ログフォーマット

Log4js を使用してログデータをテキストファイルに保存する場合、ファイルに出力されるログフォーマットは、次のとおりです。

[2016-02-24 17:42:38.946] [INFO] normal - this is a info msg
[2016-02-24 17:42:38.951] [ERROR] normal - this is a err msg

Log4js には、trace、debug、info、warn、error、および fatal の 6 つの出力ログレベルがあります (後者ほどより深刻)。

Logtail を使って Node.js ログを収集

Logtail を使用して Node.js ログを収集する方法については、「Python ログ」をご参照ください。ネットワーク構成およびネットワーク設定に適した設定を選択します。

自動生成される正規表現は、ログサンプルのみを基にしており、すべてのログフォーマットに対応しているわけではありません。したがって、正規表現が自動生成されたら、修正を加える必要があります。以下の Node.js ログサンプルを参考に、ログに必要な正規表現を記述します。

一般的な Node.js ログとその正規表現は、以下のとおりです
  • ログサンプル 1
    • ログサンプル
      [2016-02-24 17:42:38.946] [INFO] normal - this is a info msg
    • 正規表現
      \[([^]]+)]\s\[([^\]]+)]\s(\w+)\s-(. *)
    • 抽出フィールド

      timelevelloggerName、および message

  • ログサンプル 2
    • ログサンプル
      [2016-01-31 12:02:25.844] [INFO] access - 42.120.73.203 - - "GET /user/projects/ali_sls_log? ignoreError=true HTTP/1.1" 304 - "http://
      aliyun.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"
    • 正規表現
      \[([^]]+)]\s\[(\w+)]\s(\w+)\s-\s(\S+)\s-\s-\s"([^"]+)"\s(\d+)[^"]+("[^"]+)"\s"([^"]+). *
    • 抽出フィールド

      timelevelloggerNameiprequeststatusreferer および user_agent