0

我已经配置了 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。

4

1 回答 1

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.

于 2017-07-25T22:04:20.507 回答