Category:
是指对日志进行分类,category的名字即是日志分类的标签,比如按模块进行分类“database”、“auth”;
同一个分类的日志,使用相同的appenders,因为category中指定了appender;
必须定义一个名为"default"的分类,用来将无法匹配的请求指向此默认分类;
category的名称会出现在具体日志中;
category支持简单的层级,通过英文句号来识别层级。举例:如果代码中将日志归类到"app.submodule",而执行时发现没有此category的定义,系统会自动寻找其上一级分类"app"并将日志记录到此分类下,如果上一级分类也不存在,系统则按你要求的名字自动创建分类,appender将会是默认的default,如:log4js.getLogger('somecategory');
category是对日志按重要级别、系统模块等进行分类,真正决定日志格式、保存类型的是appender;
Appenders
datefile:
用于按日期时间对日志进行分割记录,而不按文件大小;
需要在应用停止时调用log4js.shutdown,以确保所有异步写入(node.js的特性)的数据能够完成执行;
"filename":是指日志文件存储的路径和文件名;
"pattern":采用标准的日期格式,按分钟记录的格式是"yyyy-MM-dd-hh-mm",一般按天或者小时记录足矣;
默认当前正在记录的日志文件名与"filename"中设置的文件名相同,如果指定的时间周期结束,这个日志文件会被重名为"filename"+"pattern",作为备份。例如:"app.log"在备份时将被命名为"app.log.2018-04-30";
"alwaysIncludePattern":默认值false,如果设为true,则当前正在记录的日志文件也会命名为"filename"+"pattern";
"daysToKeep":决定了备份文件的存放天数,超过了将自动删除,默认值0代表永久保存;
"encoding":文件编码,默认"utf-8",一般不用赋值;
"compress":是否压缩备份文件,默认false,设为true时将采用gz格式进行压缩;
"keepFileExt":是否在重命名备份文件时保留扩展名,默认为false,设为true时备份文件将被命名为"app.2018-04-30.log"而不是"app.log.2018-04-30";
file:
用于按文件大小来对日志进行记录和分割,并允许最多生成多少个备份文件;
需要在应用停止时调用log4js.shutdown,以确保所有异步写入(node.js的特性)的数据能够完成执行;
"filename":是指日志文件存储的路径和文件名;
"maxLogSize":日志文件的最大字节数,int值,如果不赋值所有日志将不断累加到一个文件上,不推荐。举例:10M的值是10485760,20M的数值是:20971520;
"backups":要保留的备份文件个数,int值,默认5,超过后新的备份文件会替换掉最早的备份。备份文件的命名格式为"filename"+数字,例如"app.log.1";
fileSync:与"file"的唯一差别在于日志是强制同步写入的,适用于日常调试,生产环境不建议使用,同步会导致性能下降;
logLevelFilter:
事件级别过滤器,强制某个appender记录指定级别范围的事件,比如把某些严重错误记录到独立的文件或者通过邮件发出通知;
"appender": 需要加载过滤器的appender的名称,必须是已经定义过的appender;
"level":需要过滤的最低事件级别,比如:"WARN",无默认值;
"maxLevel":需要过滤的最高事件级别,默认:"FATAL";
multiFile:
将不同类型的事件记录到不同的文件,产生多个使用中的日志文件。是一种将日志按"category"进行分类记录的方法。作为"file"类型appender的扩展,支持"file"的属性,比如通过"maxLogSize"对文件进行分割;
"base":日志存储的路径和文件名中固定的值,例如:"logs/"指定了目录路径,"logs/app"指定了目录路径和部分文件名;
"property":用于将日志拆分成多个文件的特征,以官方示例所示目前最适用的是"categoryName",也可以是"pid","level";
"extension":文件的后缀,后缀名前需要加英文句号,例如:".log";
"timeout":选填,int值,代表多少ms后自动关闭日志文件的写入,官方没提默认值是多少;
recording:将日志记录到内存中,不产生日志文件,主要用于测试。日志以数组的形式在内存中存储,所有使用该appender的实例都共享这个数组。具体见官方文档:https://log4js-node.github.io/log4js-node/recording.html;
tcp & tcp-server:主要用于多台服务器时,同步日志到master,交互的数据要求必须是JSON格式的字符串。具体见官方文档:https://log4js-node.github.io/log4js-node/tcp.html
smtp:
将日志通过邮件发送指定收件人,同样需要在应用停止时调用log4js.shutdown;
需要单独安装npm模块"@log4js-node/smtp";
详见介绍见官方文档:https://github.com/log4js-node/smtp;
团队开发时,不同的日志需要发送给不同的人,可以通过category来控制;
发送间隔只有一个属性"sendInterval"来控制,以秒为单位,如果白天、夜间、工作日、节假日分别有不同的要求,官方插件并不支持,需要自己写代码来实现;
领取专属 10元无门槛券
私享最新 技术干货