Log4j2 не форматирует вывод как указано / appender не добавлен я думаю - PullRequest
1 голос
/ 28 января 2020

Я учусь использовать log4j2 для моего приложения. К тому же, я добавил один appender и макет Pattern с указателем формата. Однако вывод не соответствует спецификации. Даже операторы уровня INFO не печатаются. Код:

 public static void main(String[] args) {
        ConfigurationBuilder<BuiltConfiguration> builder=ConfigurationBuilderFactory.newConfigurationBuilder();
        AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE");
        appenderBuilder.add(builder.newLayout("PatternLayout").addAttribute("pattern", "[%c{1}] %m\\n"));
        builder.add(appenderBuilder);

        Logger logger = LogManager.getLogger();
        logger.log(Level.INFO, "This is a first Info log");
        logger.log(Level.INFO, "This is a second Info log");
        logger.log(Level.ERROR, "This is a first Error log");
        logger.log(Level.FATAL, "This is a first fatal log");

    }
  • Проблемы, с которыми я сталкиваюсь:

    1. Выходные данные журнала не соответствуют указанному шаблону. Я попытался изменить шаблон, и он все еще печатается в том же формате.
    2. Я добавил четыре оператора регистрации, из которых напечатаны только два (ОШИБКА и ФАТАЛЬНО).

Выходы:

  Logging output for pattern ("%m\\n"): 
       14:42:06.046 [main] ERROR loghelper.log4j.Log2Helper - This is a first Error log
    14:42:06.049 [main] FATAL loghelper.log4j.Log2Helper - This is a first fatal log

Logging output for pattern ("%d [%t] %-5level: %msg%n%throwable"): 
        14:41:23.555 [main] ERROR loghelper.log4j.Log2Helper - This is a first Error log
    14:41:23.557 [main] FATAL loghelper.log4j.Log2Helper - This is a first fatal log

Ответы [ 2 ]

0 голосов
/ 31 января 2020

У Мохита это почти что было. Даже с помощью builder.build () все, что вы сделали, - это создание конфигурации. Вы на самом деле не сказали Log4j использовать его. Для этого вам нужно использовать

import org.apache.logging.log4j.core.LoggerContext;

LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
loggerContext.setConfiguration(configuration);

. После всего этого я должен спросить, зачем беспокоиться о конфигурации c, если вы можете просто предоставить файл?

0 голосов
/ 28 января 2020

Во-первых, Root Logger не настроен (по умолчанию - ERROR Level), поэтому печатаются журналы ошибок и уровней выше.

Во-вторых, компоновщик не создается после добавления приложения.

    builder.add(appenderBuilder);        

ДОЛЖНО БЫТЬ ОБНОВЛЕНО до

    builder.add(appenderBuilder);
    builder.build();
...