在node.js中,写入日志必不可少的就是log4js,但是,每一版log4js升级,发现要使用的配置就不一样,否则会报错,比如之前的版本可以这样配置:
{
"appenders":
[
{
"type":"console",
"category":"console"
},
{
"category":"log_file",
"type": "console",
"filename": "./logs/log_file/file.log",
"maxLogSize": 104800,
"backups": 100
},
{
"category":"log_date",
"type": "console",
"filename": "./logs/log_date/date",
"alwaysIncludePattern": true,
"pattern": "-yyyy-MM-dd-hh.log"
}
],
"replaceConsole": true,
"levels":
{
"log_file":"ALL",
"console":"ALL",
"log_date":"ALL"
}
}
但是在最新的环境中却一直这样报错:
所以,整理一下以便日后使用。
- 日志等级
const defaultLevels = {
ALL: new Level(Number.MIN_VALUE, 'ALL', 'grey'),
TRACE: new Level(5000, 'TRACE', 'blue'),
DEBUG: new Level(10000, 'DEBUG', 'cyan'),
INFO: new Level(20000, 'INFO', 'green'),
WARN: new Level(30000, 'WARN', 'yellow'),
ERROR: new Level(40000, 'ERROR', 'red'),
FATAL: new Level(50000, 'FATAL', 'magenta'),
MARK: new Level(9007199254740992, 'MARK', 'grey'), // 2^53
OFF: new Level(Number.MAX_VALUE, 'OFF', 'grey')
};
上面这一段是,每一种等级的权重,以及日志输出的颜色。
- 日志的代码结构
logger实际控制输出方式,它可以使多个appender的结合,同时它也控制着输出的级别level。在使用log4js时,我们需要传入一个category属性,如果不传入的话就会使用默认default的配置。appender 代表着输出的样式。level是输出的最低级别。
- 日志分类
日志可以分为 console, stdout, dateFile, file, fileSync, stmp … 多种,但是基本比较常用的就是console,file,dateFile类型。
- 日志输出
1)没有使用category,并且还没有配置默认default输出方式时
// 第一个 log4js 例子
const log4js = require('log4js');
// 此处没有选择 category,故而使用默认 category
let logger = log4js.getLogger();
// 设置日志的等级,此处为 info
logger.level = 'info';
// 使用相同或更高的等级 (>= info) 可以输出日志
logger.info("hello world");
在执行完js文件之后,你会发现,只是在控制台做了一个打印
2)没有使用category,但是,指定了default请求下,输出的方式。
var log4jsConfig ={
"appenders": {
"console":{
"type":"console"
},
"log_file":{
"type": "file",
"filename": "./logs/log_file/file.log",
"maxLogSize": 104800,
"backups": 100
},
"log_date":{
"type": "dateFile",
"filename": "./logs/log_date/",
"alwaysIncludePattern": true,
"pattern": "yyyy-MM-dd.log",
"layout":{
"type":"pattern",
"pattern":"日志时间 %r 日志等级%p 日志主题内容%m %n %d(yyyy/MM/dd-hh.mm.ss) "
}
}
},
"replaceConsole": true,
"categories":{
"default":{"appenders":["console"],"level":"all"},
"consoleLog":{"appenders":["console"],"level":"debug"},
"log_file_log":{"appenders":["log_file"],"level":"info"},
"log_date_log":{"appenders":["log_date","console"],"level":"error"}
}
};
配置了default默认情况下日志输出方式:为console,level为all。
3)dateFile类型的输出
- type : “dateFile” 首先指定 appenders 的类型为 dateFile
- filename : 用于指定日志落盘的文件地址 ( ps : “logs/myLog.log” )
-
pattern : 用于指定日志切分的时间间隔
- “.yyyy-MM” 精确到月
- “.yyyy-MM-dd” 精确到天
- “.yyyy-MM-dd-hh” 精确到小时
-
layout : 选择日志输出的格式,该例子中使用 pattern,其余类型会额外总结
- encoding : 编码格式 (默认 “utf-8”)
- mode : 默认 0644 无需配置,使用默认即可
- flags : 默认 “a”,无需配置,使用默认即可
- compress : compress 为 true,记录当天日志时,会对以往的老日志进行压缩操作,压缩文件后缀为 .gz (默认 : false)
- alwaysIncludePattern : 当为 true 时,log 文件名会包含之前设置的 pattern 信息 (默认为 false,但是强烈建议开启)
- alwaysIncludePattern 为 true 时,日志名例如 : myLog.log-2018-05-22
- alwaysIncludePattern 为 false 时,日志名例如 : myLog.log
- daysToKeep : 指定日志保留的天数 ( 默认为 0,始终保留 )
- keepFileExt : 是否保持日志文件后缀名 ( 默认为 false,使用 pattern 的情况下,保持默认就好 ).
layout 下 type : pattern 时配置
pattern 配置项解析
%r 日志输出时间,以 toLocaleTimeString 函数格式化
%p 日志等级
%c 日志分类
%h 访问计算机的 hostname
%m 打印的日志主题内容
%n 换行标识
%d 日志输出日期 ( 默认以 ISO8601 方式格式化 )
可自定义输出类型 %d{yyyy/MM/dd-hh.mm.ss},输出 2018/05/22-15.42.18
%z 记录进程 pid 号 ( 数据来自 node 方法 process.pid )
%x{} 输出自定义 tokens 中的项目,例如上述例子中的 user
%[ 想要输出的内容 %] 用来给被扩起来的内容着色,颜色和日志 level 有关
4)file类型的输出
类型 file 的 appenders 参数配置
在backups:2;keepFileExt :true;时 的配置,日志在文件中的写入样式。
- type : “file” 首先指定 appenders 的类型为 file
- filename : 用于指定日志落盘的文件地址 ( ps : “logs/myLog.log” )
- layout : 选择日志输出的格式,默认 basic
- maxLogSize : 单文件最大限制 ( 单位 : bytes )
- backups : 旧日志最大数量 比如backups :2,只能写入三个日志文件
- encoding : 编码格式 (默认 “utf-8”)
- mode : 默认 0644 无需配置,使用默认即可
- flags : 默认 “a”,无需配置,使用默认即可
- compress : compress 为 true,记录当天日志时,会对以往的老日志进行压缩操作,压缩文件后缀为 .gz (默认 : false)
- keepFileExt : 是否保持日志文件后缀名 .log( 默认为 false,使用 pattern 的情况下,保持默认就好 )
- Layouts 种类与配置
layout 用来解决如何写入日志,即用来定义日志的格式,layouts 的种类如下
- Basic : 默认 layout,输出:日志记录时间,等级,分类,日志正文
- colored : 输出内容和 Basic 相同,但是会根据日志等级,对日志进行着色
- messagePassThrough : 仅输出日志正文
- Pattern : 上文已经介绍过,详细配置请看上文
- replaceConsole属性配置
replaceConsole 可以将 nodejs 应用中 console.log 输出到控制台的内容.
console.log("console.log输出被输出到控制台");
学习参考博客: