Log 4 jsログ収集

4565 ワード

インストール(terminal)
npm install log4js

logger.js簡易コンテンツ
var log4js = require('log4js');
log4js.configure( options ) ;
var logger = log4js.getLogger([category]);
module.exports = logger;

logger.js具体的な内容の整理
const log4js = require( "log4js" );
const options = {
    appenders: {
        out: {
            type: "stdout",
            layout: {
                type: "pattern",
                pattern: "%[[%x{reqid}] [%d{ISO8601_WITH_TZ_OFFSET}] [%x{ip}] [%p] [%x{user}]%] %m%n",
                tokens: {
                    user( logEvent ) {
                        if ( logEvent.context.user ) {
                            return logEvent.context.user;
                        }
                        return "";
                    }
                }
            }
        },
        file: {
            type: "file",
            filename: "logs/access.log",
            maxLogSize: 10485760,
            layout: {
                type: "messagePassThrough"
            },
            compress: true
        }
    },
    categories: {
        "out": {
            appenders: [ "out" ],
            level: "info"
        },
        default: {
            appenders: [ "file" ],
            level: "info"
        }
    }
} 
log4js.configure( options );

var logger = log4js.getLogger( "out" );

module.exports = logger;

options構成
options:
  • levels:All->Trace->Debug->Info->Warn->Error->Fatal->Mark->Off(オフ)
  • appenders(appendersObject):ログイベントが何らかの形式でシーケンス化された出力
  • categories(categoriesObject):ログ・イベントをグループ化するためのラベル
  • pm 2,pm 2 InstanceVar,disableClustering:PM 2に関する構成
  • appendersObject { key : object} key: { type: types, (required) layout: layoutObject }
    types:出力タイプ
  • categoryFilter
  • console(コンソールに大量の出力を書き込むと、アプリケーションに大量のメモリが消費されます.この問題が発生した場合はstdout appenderに切り替えてみてください.)
  • dateFile (filename, pattern('.yyyy-MM-dd-hh'), compress, encoding)
  • file (filename, maxLogSize, backups, compress, encoding)
  • file Sync(compressはサポートされていません)
  • logLevelFilter
  • multiFile(マルチファイル、base、extension(接尾辞)、timeout、property:'categoryName'(ファイル名区分用))
  • multiprocess(マルチプロセスmode(master|worker)、appender(master)、loggerPort、loggerHost)
  • recording
  • stderr(標準エラーフロー)
  • stdout(標準出力ストリーム)
  • tcp (port, host)
  • tcp-server

  • LayoutObject:出力フォーマット【layoutもカスタマイズ可能】
  • basic:時間、レベル、カテゴリ、情報[2017-03-30 07:57:00.113][ERROR]cheese-Cheese is too ripe!
  • cored:basicより色が多いTRACE-'青いblue'|DEBUG-'青いcyan'|INFO-'緑のgreen'|WARN-'黄色yellow'|ERROR-'赤いred'|FATAL-'マゼンタ'
  • pattern (pattern(patternString), tokens(tokenObject))

  • patternString
  • %r time in toLocaleTimeString format
  • %pログ・レベル
  • %cログ種別
  • %hホスト名
  • %mログ情報
  • %dログ日付(デフォルト2017-06-01 08:32:56.283)%d{yyyy/MM/dd-hh.mm.ss}
  • %% % - for when you want a literal % in your output
  • %n改行
  • %z process id (from process.pid )
  • %x{} tokensの変数を
  • に持ち込む.
  • %X{} logger.addContext('user', 'charlie'); userを
  • に持ち込む
  • %[ start a coloured block (colour will be taken from the log level, similar to colouredLayout )
  • %] end a coloured block

  • tokenObject
    tokens: {
      reqid( logEvent ) {
      if ( logEvent.context.reqid ) {
        return logEvent.context.reqid;
      }
      return "";
    }
    

    CategoriesObject:default"out":{appenders:[[out],level:[info],default:{appenders:[[file],level:[info]}
    カスタムlayout
    log4js.addLayout('json', function(config) {
      return function(logEvent) { return JSON.stringify(logEvent); }
    });
    

    LogEventオブジェクト
    LoggingEvent {
      startTime: 2018-12-03T05:57:50.033Z,
      categoryName: '[Logger]',
      data: [ '      ' ],
      level: Level { level: 40000, levelStr: 'ERROR', colour: 'red' },
      context: {},
      pid: 2262 } {}
    }