nodejs 之log4.js

2,515 阅读3分钟

本文是博客迁移文章


log4.js

log4 in nodejs

日志是很关键的一点

日志有助于我们排查bug,快速定位应用问题,监控应用

INSTALL

npm install log4js -S 

simple


var log4js = require('log4js');
var logger = log4js.getLogger();
logger.level = 'debug'; // default level is OFF // which means no logs at all.
logger.debug("Some debug messages");

级别 LEVEL(日志级别)

越往下级别越高

  • ALL 输出所有日志
  • TRACE
  • DEBUG
  • INFO
  • WARN 输出级别相等或者高级别的日志
  • ERROR
  • FATAL
  • MARK
  • OFF 所有日志都不输出

日志级别有助于我们对日志的筛选与查看

设立分组日志类型 getLogger

const log4js = require('log4js')
const log = log4js.getLogger('kkk')

log.error('测试')
// [2018-05-15 20:28:24.458] [ERROR] kkk - 123

log4js.configure接收categories

接收一个appenders数组 以及一个level字符串

eg: level: error

代表只接受error或error级别以上的日志事件。

日志事件(保存文件,发送邮件等)

Appender

文件保存

log4js.configure({
  //是appenders,不是单数
  appenders:[{
      //以文件格式存储
      type: 'file',
      //自动创建123.log文件 // 文件名字
      filename: '123.log'
    }]
})
var logger = log4js.getLogger('appenders');
logger.info('this no error');

type = datefile

以日期命名日志存储文件

log4js.configure({
    appenders:[{
        type: 'dateFile',
        filename:'123'
    }]
    
})

logLevelFilter

使用logLevelFilter来过滤日志事件从而过滤Appender


log4js.configure(
    {
        appenders: {
            everything: { type: 'file', filename: 'all-the-logs.log' },
            emergencies: { type: 'file', filename: 'panic-now.log' },
            'just-errors': { type: 'logLevelFilter', appender: 'emergencies', level: 'error' }
        },
        categories: {
            default: { appenders: ['just-errors', 'everything' ], level: 'debug' }
        }
    }
)

const log = log4js.getLogger('xixi')

log.error('测试')
log.info('测试2')

panic-now.log 会写入测试 all-the-logs.log 会写入测试/测试2

日志压缩

maxLogSize: 10485760, compress: true

设置最大日志体积,以及压缩为true

输出到控制台

appenders type - console 即可

Layout 设置日志输出格式

基本布局

输出时间戳,级别,类别,格式化的日志事件数据。

type - basic

颜色布局

type- coloured(或colored)

TRACE - '蓝色' DEBUG - '青色' INFO - '绿色' WARN - '黄色' ERROR - '红' FATAL - 'magenta'

输出日志第一个值

logger.info('test', 'test')

Pattern

一些内置占位符

  • %r toLocaleTimeString格式的时间
  • %p 日志级别
  • %c 日志类别
  • %h 主机名
  • %m 记录数据

log4js-node.github.io/log4js-node… 具体在文档内


不妨重构一下以前我以前使用log4js作为博客后端的日志记录呗。

var log4js = require('log4js')
var LOG_PATH = require('../config/index.js')['LOG_PATH']||{}
log4js.configure({
  appenders: [
    {
      type: 'file', 
      filename: LOG_PATH['access']||'logs/access.log', 
      maxLogSize: 102400,
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      backups:3
    }
  ]
})

let log = log4js.getLogger('koa-blog')

log.setLevel('AUTO')
module.exports = log

这是以前使用的记录模块,比较粗略但是勉强够用,可以看到已经基本上log有写入文件中并且也有进行备份操作

但是这里模块细分我觉得还是没到位

而且日志等级也没有拆分

那这边可以简单修改一下

const log4js = require('log4js')
log4js.configure({
  appenders: {
    debug: {
      type: 'file', 
      filename: 'logs/debug.log', 
      maxLogSize: 102400,
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      backups:3
    },
    all: {
      type: 'file', 
      filename: 'logs/all.log', 
      maxLogSize: 102400,
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      backups:3
    },
    error: {
      type: 'file', 
      filename: 'logs/error.log', 
      maxLogSize: 102400,
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      backups:3
    },
    console: {
      type: 'console',
      layout: { type: 'colored'}
    }
  },
  categories:{
    error: {appenders: ['console', 'error'], level: 'error'},
    default: {appenders: ['console', 'all'], level: 'ALL'},
    debug:  {appenders: ['debug'], level: 'debug'},
  }
})

module.exports = log

这边简单对日志进行了分类。并且梳理了对日志等级的处理


总结/参考

联系我