Установите лог файл log4j
В настоящее время я работаю над проектом, который использует log4j.
Я запускаю тестовый файл (junit) и хотел бы настроить уровень журнала для отслеживания, чтобы я мог видеть, все ли значения верны. Классы, которые используют ведение журнала в проекте, содержат следующую строку:
private static final Log LOG = LogFactory.getLog(MatchTaskTest.class);
и используйте аналогичные функции для выполнения фактической отладки
LOG.trace("value");
Я никогда раньше не использовал log4j, знает ли кто-нибудь, как я могу изменить уровень журнала только для тестового теста, желательно просто определить параметр в диалоговом окне конфигурации запуска eclipse.
Ответы
Ответ 1
Использование другого файла конфигурации
Возможно, вы могли бы указать другой файл конфигурации.
java -Dlog4j.configuration=config file yourApp
Где:
-
config
, файл конфигурации, например. log4j.properties
или log4j.xml
.
-
file
, файл журнала, например. myApp.log
-
yourApp
, вы, например, приложение. MyAppGUI
Или вы можете использовать класс
java -Dlog4j.configurationClass=config class yourApp
Где:
-
config
, файл конфигурации, например. log4j.properties
или log4j.xml
.
-
class
, любой настраиваемый класс инициализации, например LogManager
, должен реализовывать
org.apache.log4j.spi.Configurator
-
yourApp
, вы, например, приложение. MyAppGUI
Вы можете увидеть больше в Apache log4j 1.2 - Краткое введение в log4j в разделе Процедура инициализации по умолчанию.
Изменение уровня программно
Кроме того, вы также можете использовать методы, предлагающие класс Logger
, например public void setLevel(Level level)
, например:
Logger.getRootLogger().setLevel(Level.TRACE);
Поскольку вы хотите только для тестирования, вы можете использовать их. Но в клиентском коде рекомендуется не использовать, поскольку они перезаписывают параметры конфигурации по умолчанию в жестком кодировании. Лучший способ - использовать внешний файл конфигурации.
Ответ 2
В классе junit положите:
Logger.getRootLogger().setLevel(Level.TRACE);
где-то перед выполнением тестируемого метода. Он установит пороговый уровень корневого регистратора TRACE.
Ответ 3
Если вы используете Maven, у вас могут быть два файла конфигурации log4j:
- один в src/main/resources, содержащий конфигурацию ведения журнала
- один в src/test/resources, содержащий конфигурацию журнала проверки времени
Maven будет автоматически использовать последний во время тестирования и объединить его в свой артефакт (JAR, WAR и т.д.), чтобы он использовался в процессе производства. Вам не нужно возиться с ключами командной строки или чем-то еще.
Ответ 4
Я не думаю, что это возможно.
Конфигурационный файл позволит вам настроить, какие сообщения журнала на самом деле отображаются в журнале, а не на каком уровне будет отправляться каждое сообщение. Это имеет смысл - конфигурация не должна влиять на уровень сообщения.
javadoc имеет метод для каждого уровня журнала и общий метод журнала, который принимает приоритет, поэтому я не уверен, что там даже по умолчанию.
Вы можете установить конфигурационный файл в командной строке через -Dlog4j.configuration=<FILE_PATH>
, чтобы вы могли настроить конкретную конфигурацию для этого тестового примера.
Ответ 5
Я понятия не имею, почему некоторые из вышеперечисленных не работают для меня. (Я не хочу писать файл конфигурации). следующие работы для меня
Logger log1 = Deencapsulation.getField(Some.class,"logger");
log1.setLevel(Level.DEBUG);
Ответ 6
Обратите внимание, что файл log4j2.properties может содержать строку
filter.threshold.level = debug
Вы можете потратить целый день, пытаясь выяснить, почему ваши операторы LOG.trace() ничего не выводят!
Ответ 7
Я действительно положил его в метод @Before. Но я считаю, что он мог (и должен) быть помещен в @BeforeClass.
Если вы установите его в тело класса, вы получите ошибки компилятора.