node.js 日志写入log4js

在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;时 的配置,日志在文件中的写入样式。

 

  1. type : “file” 首先指定 appenders 的类型为 file
  2. filename : 用于指定日志落盘的文件地址 ( ps : “logs/myLog.log” )
  3. layout : 选择日志输出的格式,默认 basic
  4. maxLogSize : 单文件最大限制 ( 单位 : bytes )
  5. backups : 旧日志最大数量 比如backups :2,只能写入三个日志文件
  6. encoding : 编码格式 (默认 “utf-8”)
  7. mode : 默认 0644 无需配置,使用默认即可
  8. flags : 默认 “a”,无需配置,使用默认即可
  9. compress : compress 为 true,记录当天日志时,会对以往的老日志进行压缩操作,压缩文件后缀为 .gz (默认 : false)
  10. keepFileExt : 是否保持日志文件后缀名 .log( 默认为 false,使用 pattern 的情况下,保持默认就好 )
  • Layouts 种类与配置

layout 用来解决如何写入日志,即用来定义日志的格式,layouts 的种类如下

  • Basic : 默认 layout,输出:日志记录时间,等级,分类,日志正文
  • colored : 输出内容和 Basic 相同,但是会根据日志等级,对日志进行着色
  • messagePassThrough : 仅输出日志正文
  • Pattern : 上文已经介绍过,详细配置请看上文
  • replaceConsole属性配置

replaceConsole 可以将 nodejs 应用中 console.log 输出到控制台的内容.

console.log("console.log输出被输出到控制台");

学习参考博客:

http://shenyujie.cc/2018/05/25/log4js-basic/

https://www.npmjs.com/package/log4js

猜你喜欢

转载自blog.csdn.net/ioszhanghui/article/details/90314785