Nodejs log4js日志管理详解

最近用到nodejs日志模块--log4js,弥补一下之前大致使用的迷惑。先看下图总览,接下来,主要由浅入深的记录log4js的常见配置。

Nodejs log4js日志管理详解_第1张图片
image.png

第一部分 入口【收集日志】

所谓的入口,其实就是所谓的收集日志信息,如何有效、分门别类的收集所需信息,使我们记录日志文件的第一步,当然,日志的作用就不在此啰嗦了。
log4js提供了等级分类别名分类

配置

npm install log4js

1.1 等级分类

创建文件testLog4.js,

//testLog4.js
var log4js = require('log4js');
//logger 是log4js的实例
var logger = log4js.getLogger();
logger.trace('this is trace');
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
logger.error('this is error');
logger.fatal('this is fatal');

结果为

Nodejs log4js日志管理详解_第2张图片
image.png

类似于console实例中的log/error等,这里先实例化log4js,采用不同的等级输出不同的信息。等级有低到高颜色渐变。

Nodejs log4js日志管理详解_第3张图片
image.png

以上图片剽窃自Node.js 之 log4js 完全讲解.

很直观的将不同的等级的日志分类。一方面方便了我们查看终端日志,另外之后在过滤中同样可以起到作用。

分等级不就是为了便于查找么,第一种分类法到此结束。

1.2 类型分类

实例化log4js时指定一个别名,然后在日志中可以方便区分哪个文件等。

//testLog4.js
/*
  类型分类
 */
//实例化时,唯一可以传的一个参数category
var logger = log4js.getLogger('随便起名字啦');
logger.trace('this is trace');
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
logger.error('this is error');
logger.fatal('this is fatal');

如下图

Nodejs log4js日志管理详解_第4张图片
image.png

一图胜前言,收集日志的方法都有了,具体的使用方法,后续罗列,紧接的任务就是如何保存?

第二部分 出口【输出日志】

2.1 Appender

刚我们只是初始化实例,以不同的类型、等级输出。默认为console输出,如何保存在文件中,就是appender上场了。

Nodejs log4js日志管理详解_第5张图片
image.png
2.1.1 file保存
//testLog4.js
log4js.configure({
  //是appenders,不是单数
  appenders:[{
      //以文件格式存储
      type: 'file',
      //自动创建123.log文件
      filename: '123.log'
    }]
})
var logger = log4js.getLogger('appenders');
logger.info('this no error');

结果保存在123.log中:

//123.log
[2017-09-23 16:01:59.940] [INFO] appenders - this no error
2.1.2 datefile保存

最简单的日期保存例子,将日志保存在日志文件中,以天为单位。

//testLog4.js
/*
  dateFile,根据时间保存文件位置,文件自动创建
 */
log4js.configure({
  appenders:[{
    type: 'dateFile',
    //文件名为= filename + pattern, 设置为alwaysIncludePattern:true
    filename: '234',
    pattern: '-yyyy-MM-dd.log',
    //包含模型
    alwaysIncludePattern: true,
  }]
})
var logger = log4js.getLogger();
logger.info('this is datefile');

结果:

//234-2017-09-23.log
[2017-09-23 16:17:06.764] [INFO] [default] - this is datefile

2.1.3 levelFilter 过滤筛选
/*
  loglevelFilter 过滤筛选
 */

log4js.configure({
  appenders:[
    //控制台输出
    {"type": "console"},
    { //日志过滤
      type: 'loglevelFilter',
      //  权重大于或者等于level【debug】的日志将会输出
      level: 'WARN',
      //筛选model1
      category: 'model1',
      // 同时支持数组
      // category:['model1', 'model2'],
      appender:{
        type: 'file',
        filename: '345.log'
      }
    }
  ],
  "replaceConsole": true

})

var logger = log4js.getLogger('model1');
logger.trace('this is trace');
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
logger.error('this is error');
logger.fatal('this is fatal');

var logger = log4js.getLogger('model2');
logger.trace('this is trace');
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
logger.error('this is error');
logger.fatal('this is fatal');

结果筛选如下

Nodejs log4js日志管理详解_第6张图片
image.png

第三部分 layout配置

暂缓

第四部分 实例配置Express+log4js

4.1 需求一

  1. 每天生成一个日志文件,放在/logs目录下,名字如2017-09-23.log;
  2. 单独将log4js配置在一个文件中,外界不需要每次配置;
  3. 记录客户端请求的HTTP状态码、URL、方法。
  4. 终端显示所有日志信息,日志文件只记录WARN以及以上级别的信息。

GitHub--地址

配置文件:logConfig.js

var log4js = require('log4js');
const fs = require('fs');

levels = {
    'trace': log4js.levels.TRACE,
    'debug': log4js.levels.DEBUG,
    'info': log4js.levels.INFO,
    'warn': log4js.levels.WARN,
    'error': log4js.levels.ERROR,
    'fatal': log4js.levels.FATAL
};

function judgePath(pathStr) {
    if (!fs.existsSync(pathStr)) {
        fs.mkdirSync(pathStr);
        console.log('createPath: ' + pathStr);
    }
}

log4js.configure({
  appenders:[
    //控制台输出
    {"type": "console"},
    {type: 'dateFile',
    //文件名为= filename + pattern, 设置为alwaysIncludePattern:true
    filename: 'logs/', // 需要手动创建此文件夹
    pattern: 'yyyy-MM-dd.log',
    //包含模型
    alwaysIncludePattern: true,
  }],
  replaceConsole: true // 替换 console.log
})

exports.logger = function (name, level) {
    var logger = log4js.getLogger(name);
    //默认为debug权限及以上
    logger.setLevel(levels[level] || levels['debug']);
    return logger;
};

exports.use = function (app, level) {
  //加载中间件
    app.use(log4js.connectLogger(log4js.getLogger('logInfo'), {
        level: levels[level] || levels['debug'],
      //格式化http相关信息
        format: ':method :url :status'
    }));
};

app.js使用中间件

var log4js = require('./config/logConfig.js');
var app = express();
log4js.use(app);

index.js中使用log4js

var express = require('express');
var router = express.Router();
//category名字为inde.js 只收录warn以及以上权限信息
var logger = require('../config/logConfig.js').logger('index.js', 'warn');

/* GET home page. */
router.get('/', function (req, res, next) {
  //不显示
    console.log('This is an index page!');
    logger.trace('This is an index page! -- log4js');
    logger.debug('This is an index page! -- log4js');
    logger.info('This is an index page! -- log4js');
    logger.warn('This is an index page! -- log4js');
    logger.error('This is an index page! -- log4js');
    logger.fatal('This is an index page! -- log4js');

    res.render('index', {title: 'log4js'});
});
module.exports = router;

4.2 需求二

2.x版本的区别

log4js.configure(...); // set up your categories and appenders
const logger = log4js.getLogger('console');
console.log = logger.info.bind(logger); // do the same for others - console.debug, etc.

log

暂缓

参考列表

Node.js 之 log4js 完全讲解
log4js-Node.js中的日志管理模块使用与封装
Log4js配置详解
nodejs开发——log4js学习
大搜车NodeJS日志规范化与分析监控
基于node+express+log4js的前端异常信息监控
node.js项目中使用log4js保存日志文件

更多精彩内容请关注“IT实战联盟”哦~~~


IT实战联盟.jpg

你可能感兴趣的:(Nodejs log4js日志管理详解)