7 ответов:
изменение уровня журнала просто; изменение других частей конфигурации будет представлять более глубокий подход.
LogManager.getRootLogger().setLevel(Level.DEBUG);изменения постоянны через жизненный стиль
Logger. При повторной инициализации конфигурация будет считываться и использоваться как установка уровня во время выполнения не сохраняется изменение уровня.обновление: если вы используете Log4j 2, вы должны удалить вызовы
setLevelна документация как это может быть достигнуто с помощью классов реализации.вызовы логгера.setLevel() или аналогичные методы не поддерживаются в ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС. Приложения должны удалить их. Эквивалентная функциональность является предусмотрено в Log4j 2 классов реализации, но может оставить применение восприимчивы к изменениям в Log4j 2 внутренних устройств.
File Watchdog
log4j-это возможность смотреть
log4j.xmlфайл для изменения конфигурации. Если вы измените файл log4j, log4j автоматически обновит уровни журнала в соответствии с вашими изменениями. Смотрите документациюorg.apache.log4j.xml.DOMConfigurator.configureAndWatch(String,long) для сведения. По умолчанию время ожидания между проверками составляет 60 секунд. Эти изменения будут постоянными, так как вы непосредственно изменяете файл конфигурации в файловой системе. Все, что вам нужно сделать, это вызвать DOMConfigurator.configureAndWatch() однажды.внимание: метод configureAndWatch небезопасен для использования в средах J2EE из-за утечки потока
протокола
другой способ установить уровень журнала (или перенастройку в целом) log4j-это использование JMX. К log4j регистрирует свои регистраторы, как и JMX MBean-компонентов. С помощью приложения сервера доступ консолей (или утилиты jconsole пакета JDK.exe)вы можете перенастроить каждый отдельный регистратор. Эти изменения не являются постоянными и будут сброшены в конфигурацию, как установлено в файл конфигурации после перезагрузки приложения (сервера).
Самопальный
как описано Аароном, вы можете установить уровень журнала программно. Вы можете это реализовать в своем приложении так, как вы хотели бы, чтобы это произошло. Например, у вас может быть графический интерфейс, в котором пользователь или администратор изменяет уровень журнала, а затем вызывает
setLevel()методы регистратор. Сохраняете ли вы настройки где-то или нет, зависит от вас.
Log4j2 можно настроить для обновления его конфигурации путем сканирования log4j2.xml-файл (или эквивалент) с заданными интервалами. Просто добавьте " monitorInterval параметр" для тега конфигурации. См. строку 2 примера log4j2.xml-файл, который сообщает log4j для повторного сканирования его конфигурации, если с момента последнего события журнала прошло более 5 секунд.
<?xml version="1.0" encoding="UTF-8" ?> <Configuration status="warn" monitorInterval="5" name="tryItApp" packages=""> <Appenders> <RollingFile name="MY_TRY_IT" fileName="/var/log/tryIt.log" filePattern="/var/log/tryIt-%i.log.gz"> <Policies> <SizeBasedTriggeringPolicy size="25 MB"/> </Policies> ... </RollingFile> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="MY_TRY_IT"/> </Root> </Loggers> </Configuration>
Я сделал это, чтобы динамически изменить уровень журнала log4j, и это сработало для меня, я не сослался ни на один документ. Я использовал это значение системного свойства для установки имени файла журнала. Я использовал ту же технику, чтобы установить уровень ведения журнала, а также, и это сработало
передал это как параметр JVM (я использую Java 1.7)
java -Dlogging.level=DEBUG -cp xxxxxx.jar xxxxx.javaв файле log4j. properties я добавил эту запись
log4j.rootLogger=${logging.level},file,stdoutпробовал
java -Dlogging.level=DEBUG -cp xxxxxx.jar xxxxx.java java -Dlogging.level=INFO-cp xxxxxx.jar xxxxx.java java -Dlogging.level=OFF -cp xxxxxx.jar xxxxx.javaвсе работает. надеюсь, это поможет!
I есть следующие зависимости в моем pom.xml
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>apache-log4j-extras</artifactId> <version>1.2.17</version> </dependency>
С log4j 1.x я считаю, что лучший способ-использовать DOMConfigurator для отправки одного из предопределенных наборов конфигураций журнала XML (скажем, один для обычного использования и один для отладки).
используя их можно сделать что-то вроде этого:
public static void reconfigurePredefined(String newLoggerConfigName) { String name = newLoggerConfigName.toLowerCase(); if ("default".equals(name)) { name = "log4j.xml"; } else { name = "log4j-" + name + ".xml"; } if (Log4jReconfigurator.class.getResource("/" + name) != null) { String logConfigPath = Log4jReconfigurator.class.getResource("/" + name).getPath(); logger.warn("Using log4j configuration: " + logConfigPath); try (InputStream defaultIs = Log4jReconfigurator.class.getResourceAsStream("/" + name)) { new DOMConfigurator().doConfigure(defaultIs, LogManager.getLoggerRepository()); } catch (IOException e) { logger.error("Failed to reconfigure log4j configuration, could not find file " + logConfigPath + " on the classpath", e); } catch (FactoryConfigurationError e) { logger.error("Failed to reconfigure log4j configuration, could not load file " + logConfigPath, e); } } else { logger.error("Could not find log4j configuration file " + name + ".xml on classpath"); } }просто вызовите это с соответствующим именем конфигурации и убедитесь, что вы поместили шаблоны в путь к классам.
Если вы хотите изменить уровень ведения журнала всех регистраторов, используйте ниже метод. Это перечислит все регистраторы и изменит уровень ведения журнала на заданный уровень. Пожалуйста, убедитесь, что вы НЕ НАДО есть
log4j.appender.loggerName.Threshold=DEBUGрасположен в .public static void changeLogLevel(Level level) { Enumeration<?> loggers = LogManager.getCurrentLoggers(); while(loggers.hasMoreElements()) { Logger logger = (Logger) loggers.nextElement(); logger.setLevel(level); } }
вы можете использовать следующий фрагмент кода
((ch.qos.logback.classic.Logger)LoggerFactory.getLogger(packageName)).setLevel(ch.qos.logback.classic.Level.toLevel(logLevel));
Comments