log4js 将日志输出到文件

2019-08-26
JavaScript
11218

log4js 提供了很多种日志的输出场景,包括

  • DateFile:日志输出到文件,日志文件可以安特定的日期模式滚动,例如今天输出到 default-2016-08-21.log,明天输出到 default-2016-08-22.log;
  • SMTP:输出日志到邮件;
  • Mailgun:通过 Mailgun API 输出日志到 Mailgun;
  • levelFilter 可以通过 level 过滤;
  • console 控制台

这里主要讲一下日志输出到文件的具体配置。

先看一个log4js输出文件的例子:

var log4js = require('log4js');

log4js.configure({
    appenders: {
        production: {
            type: 'dateFile',
            filename: 'demo.log'
        }
    },
    categories: {
        default: { appenders: [ 'production' ], level: 'debug' }
    }
});

var logger = log4js.getLogger();

logger.info('this is a info');

执行代码,会在当前目录下生成一个叫demo.log的日志文件,

内容如下

[2019-08-26T17:27:03.355] [INFO] default - this is a info

想要灵活使用它,需要了解dateFile的各个配置项的含义

type

日志输出类型

filename: string

日志文件的路径,注意这里是路径而不是文件名。

encoding: string

日志编码格式,默认utf-8

mode: integer

用来设置日志文件的权限,默认0o644 意思是对所有者有读写权限,对其他用户和用户组只读。

具体含义可以参照nodejs文档

flags: string

是nodejs 读写文件的配置位,默认为a,表示打开文件,并接着上一条写入到同一个文件中。

具体含义可以参考官方文档

compress: boolean

表示是否压缩日志,默认false。压缩之后会已.gz作为后缀

alwaysIncludePattern: boolean

日志文件是否始终展示预设的pattern。

默认值为false。

以demo为例,日志在初始生成时,日志名称会叫demo.log

把时间调到第二天,再执行此代码,会生成一个文件名为demo.log.2019-08-26的日志文件,记录着昨天的日志。同时新创建一个demo.log 文件,用于记录当天的日志。

如果需要每个日志文件名都带有时间,可以把这个属性设置为true,效果如下

新生成一个带日期格式的日志文件demo.log.2019-08-26

daysToKeep: integer

日志保存的时间。单位为天。默认值为0,表示一直保存。

keepFileExt: boolean

日志文件是否始终保持后缀,默认为false。如上demo所示,日志文件名demo.log.2019-08-26,如果始终让log放在最后端,可以设置true,则日志文件边为demo.2019-08-26.log

完整示例如下

var log4js = require('log4js');

log4js.configure({
    appenders: {
        production: {
            type: 'dateFile',
            filename: 'demo.log',
            alwaysIncludePattern: true,
            keepFileExt: true,
            daysToKeep: 30,
        }
    },
    categories: {
        default: { appenders: [ 'production' ], level: 'debug' }
    }
});

var logger = log4js.getLogger();

logger.info('this is a info');