Log4j2 выпуск 2.11.0 / 2.11.1 отлично работал в приложениях Java 8, но не в Java 11
Вот пример log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="log-path">C:\\MyTestXXXX\\EnterpriseLogs</Property>
</Properties>
<Appenders>
<RollingFile name="MyTestOnly" fileName="${log-path}\ServerLog.log" filePattern="${log-path}\ServerLog_%d{yyyy-MM-dd}_%i.log" append="true">
<PatternLayout>
<Pattern>[#%d{HH:mm:ss}|%p|%m#]%n</Pattern>
</PatternLayout>
<Policies>
<CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="OnlyLOG" additivity="true">
<AppenderRef ref="MyTestOnly" level="ALL" />
<Logger>
<Root level="ALL" />
</Loggers>
</Configuration>
В исходном коде Java я сделал это:
import org.apache.logging.log4j. *;
import org.apache.logging.log4j.core.Logger;
...
// Get org.apache.logging.log4j.core.Logger
Logger logger = (Logger) LogManager.getLogger("OnlyLOG");
logger.log(Level.forName("INFO", 600), "Log this text now!", new Exception("xxxxxx"));
Работая в Java 8, я вижу, что serverLog.log имеет контент, и это хорошо.
Запущенный в Java 11, нет журнала.
В ходе дальнейшего изучения (отладки) я нашел эту строку интересной:
Logger logger = (Logger) LogManager.getLogger("OnlyLOG");
После выполнения в Java 8 logger был что-то вроде «ALL in 2f333739», и log был в порядке.
Но в Java 11 logger был что-то вроде «ОШИБКА в 2f333739» и не было журнала. Очевидно, уровень стал «ОШИБКА» вместо «ВСЕ».
Итак, я пробую это в Java 11:
Level loggerLevel = logger.getLevel(); // Obviously it is ERROR level
logger.log(loggerLevel, "Log this text now!", new Exception("xxxxxx"));
Журнал произошел в консоли (скорее всего, прошел через Root), а не в файле ServerLog.log, который был настроен в log4j2.xml для регистратора OnlyLOG.
Итак, что вызвало разницу в уровне между Java 8 и Java 11? Другими словами, что следует изменить, чтобы в Java 11 журнал мог работать так же, как в Java 8?