Да, я прочитал все связанные вопросы. Я использую log4j2 (испробовал как версию 2.4, так и обновление до версии 2.6.2).Log4j2 не меняет уровень ведения журнала во время выполнения
У меня есть небольшая утилита для клиентов. Я заинтересован в том, чтобы поддерживать открытые конфигурации как минимум. Но для проблемных случаев я также хотел бы добавить флаг -debug
, чтобы включить журналы отладки во время выполнения.
Вот мой код, чтобы включить ведение журнала отладки
private static void enableDebugLogs(){
LoggerContext ctx = (LoggerContext) LogManager.getContext();
LoggerConfig log = ctx.getConfiguration().getRootLogger();
System.out.println(log.getLevel()); // INFO
log.setLevel(Level.DEBUG);
System.out.println(log.getLevel()); // DEBUG
ctx.updateLoggers();
System.out.println(ctx.getRootLogger().getLevel()); // DEBUG, hey it works, right?
}
Но это не на самом деле работать с любым из этих случаев:
enableDebugLogs();
logger.debug("Debug mode on"); // static, already made logger. Level did not change
LogManager.getLogger(Main.class).debug("Debug"); // Nope, not printing
Logger root = LogManager.getRootLogger();
root.info("Level: " + root.getLevel()); // Level: INFO, should be DEBUG
Полезность программа закончена, как правило, менее чем за 30 секунд, поэтому изменение должно быть мгновенным. Вот log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level - %msg%n"/>
</Console>
<RollingFile name="File" fileName="program_name.log" filePattern="program_name-archived.log">
<PatternLayout>
<Pattern>%d{HH:mm:ss.SSS} %-5level - %msg%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="10 KB" />
</Policies>
<DefaultRolloverStrategy min="1" max="1"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
Проблема с использованием приложений AppenderRefs? Могу ли я как-то сказать, что Appenders обновил уровень ведения журнала от Root logger?
Имейте в виду, что если вы используете оба (смотреть конфигурационный файл ** и ** программные изменения), то автоматическая реконфигурация может и сбросит ваши программные изменения. – Fildor