我正在使用node-log4js。 (它是log4JS,而不是log4J!) 我认为记录器的类别就像你把Log4中的字符串放入记录器的构造函数中一样(通常你把你的fqn类名放在那里),这样log4j就可以将记录的东西放到正确的位置。
我得到了以下配置:
{
"appenders": [
{
"type": "console",
},
{
"type": "file",
"absolute": true,
"filename": "/tmp/app.log",
"maxLogSize": 20480,
"backups": 10
},
{
"type": "console",
"category": "app.access"
}
]
}
所需的行为是所有“app.access”内容只会转到最后一个appender(现在也是控制台,但将来可能会改变)。目前,所有带有“app.access”类别的记录都将记录两次到控制台,一次记录到文件。
有没有办法给那些其他两个appender一个“除app.access”以外的所有类别?怎么样?
非常感谢您提前
答案 0 :(得分:6)
我有类似的要求。我想从控制台记录器中排除一堆类别。
我根据logLevelFilter写了一些东西,我称之为categoryFilter。
categoryFilter.js:
"use strict";
var log4js = require('log4js');
function categoryFilter (excludeCategories, appender) {
return function(logEvent) {
if (excludeCategories.every(function(x){return (x!=logEvent.category);})) {
appender(logEvent);
}
};
}
function configure(config) {
log4js.loadAppender(config.appender.type);
var appender = log4js.appenderMakers[config.appender.type](config.appender);
return categoryFilter(config.exclude, appender);
}
exports.appender = categoryFilter;
exports.configure = configure;
要使用它,我的应用程序开头附近有这个代码段:
var log4js = require('log4js');
log4js.loadAppender('categoryFilter',require('./src/categoryFilter'));
log4js.configure('log4js-conf.js');
我的配置文件包含以下内容:
{
"appenders": [
{
"type": "file",
"filename": "logs/logfile.log",
"maxLogSize": 20480,
"backups": 3
},
{
"type": "categoryFilter",
"exclude":["results"],
"appender":{
"type": "console"
}
},
],
"replaceConsole":true
}
我对你的想法感兴趣。
答案 1 :(得分:1)
我遇到了类似的问题,这是我如何解决它 - 使用关卡。 使用以下配置文件:
{
"appenders": [
{
"type": "logLevelFilter",
"level": "INFO",
"appender": {
"type": "console",
"layout": {
"type": "colored",
"pattern": "[%d] %-5p <%c> %m"
}
}
},
{
"type": "console",
"layout": {
"type": "messagePassThrough"
},
"category": "raw"
}
]
}
使用2个不同的log4js实例,如下所示:
var path = require('path');
var log4js = require('log4js');
log4js.configure('log4js.json');
var log = log4js.getLogger(path.basename(__filename));
var raw = log4js.getLogger('raw');
在您的代码中使用log.info()
,log.warn()
,log.error()
或log.fatal()
来获取标准日志,例如:
[2015-01-12 19:37:19.931] [INFO] app.js - app started
[2015-01-12 19:38:52.484] [ERROR] other.js - Error. failed to open file
上面的相同日志使用raw.trace()
:
app started
Error. failed to open file
我用它来突出显示控制台中的不同情况。让它看起来完全不同对我来说很重要,所以我会注意到这些事件。但是当它记录到文件中时,我不介意它是否有时间戳(因为它在回顾时确实有帮助)。因此我在log4js.json文件中也有以下appender:
{
"type": "file",
"filename": "app.log",
"maxLogSize": 1048576,
"backups": 10,
"layout": {
"type": "pattern",
"pattern": "[%d] %-5p <%c> %m"
}
}
希望这有帮助! :)
答案 2 :(得分:0)
只需将前两个appender分配到与&#34; app.access&#34;不同的类别。并在getLogger中使用该类别。