Как настроить журнал аудита приложений на отдельный файл в Wildfly-swarm

Я настроил фракцию Logging и попытался добавить дополнительный обработчик для хранения определенных журналов в разных файлах, используя категорию, просмотрев ответ в Как регистрировать аудит приложения в отдельный файл в Wildfly 8, но с адаптацией к свободному API Wildfly-Swarm.

Код выглядит следующим образом:

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 не должен использоваться таким образом.


person xsilmarx    schedule 25.07.2017    source источник


Ответы (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.

person James R. Perkins    schedule 25.07.2017