我已经配置了Logging部分,并尝试使用类别添加一个额外的处理程序来存储不同文件中的特定日志,方法是查看How to log application auditing to separate file on Wildfly 8中的答案,但要适应Wildfly-Swarm流畅的API。
代码如下所示:
LoggingFraction loggingFraction = new LoggingFraction()
.consoleHandler(level, "COLOR_PATTERN")
.formatter("PATTERN", "%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%t] (%c{1}) %s%e%n")
.formatter("COLOR_PATTERN", "%K{level}%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%t] (%c{1}) %s%e%n")
.formatter("AUDIT", "%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p (%c{1}) %s%e%n")
.periodicSizeRotatingFileHandler("FILE", h ->{
h.level(level)
.namedFormatter("PATTERN")
.append(true)
.suffix(".yyyy-MM-dd")
.rotateSize(maxSize)
.enabled(true)
.encoding("UTF-8")
.maxBackupIndex(maxFiles);
Map<String,String> fileSpec = new HashMap<>();
fileSpec.put("path", getLogsDirectory() + "/" + "application.log");
h.file(fileSpec);
})
.periodicSizeRotatingFileHandler("FILE_AUDIT_HANDLER", h ->{
h.level(level)
.namedFormatter("AUDIT")
.append(true)
.suffix(".yyyy-MM-dd")
.rotateSize(maxSize)
.enabled(true)
.encoding("UTF-8")
.maxBackupIndex(maxFiles);
Map<String,String> fileSpec = new HashMap<>();
fileSpec.put("path", getLogsDirectory() + "/" + "application-audit.log");
h.file(fileSpec);
})
.rootLogger(l -> {
l.level(level)
.handler("CONSOLE")
.handler("FILE")
;
})
.logger("FILE_AUDIT", l -> {
l.level(level)
.category("com.company.app.webservice")
.level(Level.INFO)
.handler("FILE_AUDIT_HANDLER")
;
})
;
然后我在代码中创建了一个普通的Logger来添加日志,如下所示:
private static final Logger LOGGER_AUDIT = LoggerFactory.getLogger("com.company.app.webservice");
...
LOGGER_AUDIT.info("Testing audit log")
但它不起作用。
我假设类别名称只需要匹配Logger名称,以Logger名称“以类别名称开头”的方式,然后它将被包含。我对吗?
我不知道我的配置是否有什么问题,或者Logger不应该像那样使用。
答案 0 :(得分:1)
category
属性有点遗留属性。如果有意义,记录器名称实际上是类别。在您的示例中,上面的记录器名为FILE_AUDIT
,这意味着您将匹配Logger.getLogger("FILE_AUDIT")
。
以下内容可能就是您想要的。
LoggingFraction loggingFraction = new LoggingFraction()
.consoleHandler(level, "COLOR_PATTERN")
.formatter("PATTERN", "%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%t] (%c{1}) %s%e%n")
.formatter("COLOR_PATTERN", "%K{level}%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%t] (%c{1}) %s%e%n")
.formatter("AUDIT", "%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p (%c{1}) %s%e%n")
.periodicSizeRotatingFileHandler("FILE", h ->{
h.level(level)
.namedFormatter("PATTERN")
.append(true)
.suffix(".yyyy-MM-dd")
.rotateSize(maxSize)
.enabled(true)
.encoding("UTF-8")
.maxBackupIndex(maxFiles);
Map<String,String> fileSpec = new HashMap<>();
fileSpec.put("path", getLogsDirectory() + "/" + "application.log");
h.file(fileSpec);
})
.periodicSizeRotatingFileHandler("FILE_AUDIT_HANDLER", h ->{
h.level(level)
.namedFormatter("AUDIT")
.append(true)
.suffix(".yyyy-MM-dd")
.rotateSize(maxSize)
.enabled(true)
.encoding("UTF-8")
.maxBackupIndex(maxFiles);
Map<String,String> fileSpec = new HashMap<>();
fileSpec.put("path", getLogsDirectory() + "/" + "application-audit.log");
h.file(fileSpec);
})
.rootLogger(l -> {
l.level(level)
.handler("CONSOLE")
.handler("FILE")
;
})
.logger("com.company.app.webservice", l -> {
l.level(level)
.level(Level.INFO)
.handler("FILE_AUDIT_HANDLER")
;
})
;
请注意,唯一真正的变化是删除类别(它是一个只读属性)并将FILE_AUDIT
名称更改为com.company.app.webservice
。