1. 程式人生 > >Node.js Log4js使用詳解

Node.js Log4js使用詳解

log4js-node是log4js的Node.js版本。

log4js-node的使用比較簡單,以下內容主要部分來自官方文件。

https://github.com/log4js-node/log4js-node

Installation

npm install log4js

Usage

注意:log4js預設category的level是OFF,所以以下程式不會有輸出。

var log4js = require('log4js');
var logger = log4js.getLogger();
logger.level = 'debug';
logger.
debug("Some debug messages");

以下程式將default category的level改為error。

const log4js = require('log4js');
log4js.configure({
  appenders: { cheese: { type: 'file', filename: 'cheese.log' } },
  categories: { default: { appenders: ['cheese'], level: 'error' } }
});

const logger = log4js.getLogger('cheese'
); logger.trace('Entering cheese testing'); logger.debug('Got cheese.'); logger.info('Cheese is Comté.'); logger.warn('Cheese is quite smelly.'); logger.error('Cheese is too ripe!'); logger.fatal('Cheese was breeding ground for listeria.');

成功輸出error以上級別的log。

[2010-01-17 11:43:37.987] [ERROR] cheese - Cheese is too ripe!
[2010-01-17 11:43:37.990] [FATAL] cheese - Cheese was breeding ground for listeria.

Example

https://github.com/log4js-node/log4js-example

1. log4js.configure()

configure可以接收一個JSON檔案(log4js.json)作為引數。

2. log4js.json

定義了3種category、4種appender。其中errors是logLevelFilter,輸出到errorFile,就是所有error資訊會單獨輸出到errors.log檔案中。

{
    "appenders": {
      "access": {
        "type": "dateFile",
        "filename": "log/access.log",
        "pattern": "-yyyy-MM-dd",
        "category": "http"
      },
      "app": {
        "type": "file",
        "filename": "log/app.log",
        "maxLogSize": 10485760,
        "numBackups": 3
      },
      "errorFile": {
        "type": "file",
        "filename": "log/errors.log"
      },
      "errors": {
        "type": "logLevelFilter",
        "level": "ERROR",
        "appender": "errorFile"
      }
    },
    "categories": {
      "default": { "appenders": [ "app", "errors" ], "level": "DEBUG" },
      "http": { "appenders": [ "access"], "level": "DEBUG" }
    }
  }

3. log4js呼叫

根據category決定輸出檔案,getLogger(‘http’)輸出到access.log,其他情況下輸出到app.log(因為category非http即default),error自動輸出到errors.log檔案。

var log4js = require('log4js');
var log = log4js.getLogger("app");

app.use(log4js.connectLogger(log4js.getLogger("http"), { level: 'auto' }));

log.error("Something went wrong:", err);

動態配置

1. 不同的log4js.json

因為log4js.configure支援json檔案作為引數,可以為Development和Production定義不同的配置檔案。
如配置檔案放在config目錄下,區分dev和prod。

config/dev/log4js.json
config/prod/log4js.json

2. 呼叫方法

根據ENV值選擇呼叫的配置檔案,即執行前set ENV=prod,default是dev。

let env = process.env.ENV || 'dev';
let logConfigPath = './config/' + env + '/log4js.json';
let logConfig = require(logConfigPath);
log4js.configure(logConfig);

閱讀導航