Pomelo 日志管理
Pomelo 日志是通过 pomelo-logger 模块来管理的,pomelo-logger 是对 log4js 的简单封装,并提供了一些非常有用的特色功能。日志是通过 category 来进行管理与维护的,可以在 log4js.json 文件中进行配置:
{
"appenders": [
{
"type": "console"
},
{
"type": "file",
"filename": "./logs/con-log-${opts:serverId}.log",
"pattern": "connector",
"maxLogSize": 1048576,
"layout": {
"type": "basic"
},
"backups": 5,
"category": "con-log"
},
{
"type": "file",
"filename": "./logs/rpc-log-${opts:serverId}.log",
"maxLogSize": 1048576,
"layout": {
"type": "basic"
},
"backups": 5,
"category": "rpc-log"
},
{
"type": "file",
"filename": "./logs/forward-log-${opts:serverId}.log",
"maxLogSize": 1048576,
"layout": {
"type": "basic"
},
"backups": 5,
"category": "forward-log"
},
{
"type": "file",
"filename": "./logs/rpc-debug-${opts:serverId}.log",
"maxLogSize": 1048576,
"layout": {
"type": "basic"
},
"backups": 5,
"category": "rpc-debug"
},
{
"type": "file",
"filename": "./logs/crash.log",
"maxLogSize": 1048576,
"layout": {
"type": "basic"
},
"backups": 5,
"category":"crash-log"
},
{
"type": "file",
"filename": "./logs/admin.log",
"maxLogSize": 1048576,
"layout": {
"type": "basic"
}
,"backups": 5,
"category":"admin-log"
},
{
"type": "file",
"filename": "./logs/pomelo.log",
"maxLogSize": 1048576,
"layout": {
"type": "basic"
}
,"backups": 5,
"category":"pomelo"
}
],
"levels": {
"rpc-log" : "ERROR",
"forward-log": "ERROR"
},
"replaceConsole": true,
"lineDebug": false
}
从配置文件中可以看出,除了 console 项外,每一项都配了 category,pomelo-logger 通过 getLogger 的第一个参数指定 category 来把该 logger 输出的日志定向到该 category 配置的文件或者其它输出方案。你可以添加自己的 category,并在 getLogger 指定该 category,你就可以把日志定向到该 category 所配的输出方案。
注意:不建议使用不指定 category 的方式来进行配置,这样子所有的 logger 都会定向到该全局的输出方案。
日志 category
在 pomelo 中有些指定的 category 用于输出日志:- pomelo: 输出 pomelo 框架里的日志;
- admin-log: 输出 pomelo-admin 用于监控 client 登陆 master 时输出的日志;
- crash-log: 输出服务器 crash 异常时的日志信息;
- rpc-debug: 输出 rpc-debug 的日志,需要开启 rpc-debug 模式;
- forward-log : 输出从前端服务器转发到后端服务器的请求日志;
- rpc-log: 输出 rpc filter 上的日志;
- con-log: 输出 handler filter 上的日志。
日志 levels
可以通过指定日志的 levels 来控制输出的日志:"levels": {
"rpc-log" : "ERROR",
"forward-log": "ERROR"
}
日志等级从左到右依次提升:TRACE, DEBUG, INFO, WARN, ERROR, FATAL。
在 levels 上等级配的越低,输出的日志范围则越大,相反,则输出的日志范围越小。比如:
var rpc_logger = require('pomelo-logger').getLogger('rpc-log', __filename);
rpc_logger.info("msg");
这里 rpc_logger 的输出日志等级是 INFO,而 levels 上配的是 ERROR,那么该日志就不会被输出到对应的 appenders 上面。你需要 levels 改成低于 INFO 的级别,比如 DEBUG 才会把 rpc_logger 的日志输出。
日志配置项说明
- type: 指定 appenders 的类型,可以是 console、dataFile、file 等,具体详见 log4js ;
- filename: 指定输出文件的路径;
- pattern:指定输出日志的 pattern (范式);
- maxLogSize:指定输出日志的最大大小;
- layout:指定输出的 layout (布局)样式;
- backups:指定最大输出的文件数目;
- category:指定该 appender 对应的 category,如果没有该项,说明该 appender 是一个全局的 appender;
- replaceConsole:指定是否替换默认的 console;
- lineDebug:指定是否开启 debug 显示日志行数。