Я пытаюсь обновить старый проект maven2 с log4j 1.2 до log4j 2.13. Я добавил новые зависимости в pom.xml
[…]
<Private-Package>
[…]
org.apache.logging.log4j.*,
[…]
</Private-Package>
[…]
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.0</version>
</dependency>
Преобразование в новый API, я изменил старый BasicConfigurator
на вызов Configurator.setRootLevel
в моем инициализаторе основного класса. Это приводит к следующему выводу:
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ClassCastException: org.apache.logging.log4j.simple.SimpleLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext
at org.apache.logging.log4j.core.LoggerContext.getContext(LoggerContext.java:224)
at org.apache.logging.log4j.core.config.Configurator.setRootLevel(Configurator.java:376)
at project.Main.<clinit>(Main.java:35)
За ответы на этот вопрос , я также попытался добавить файл конфигурации в src/main/resources
. Это анализируется log4j и хорошо работает для SimpleLogger
, по умолчанию он удаляет вызов на Configurator.setRootLevel()
. Тем не менее, я все еще получаю «не удалось найти реализацию ведения журнала» независимо от того, включаю ли я файл конфигурации или нет.
Это сбивает с толку. Несмотря на первое сообщение об ошибке, log4j-core
явно присутствует, поскольку в противном случае ClassCastException не могло бы возникнуть в первую очередь. Думаю, я либо где-то испортил pom.xml
, либо мне нужно было позвонить еще, прежде чем позвонить Configurator.setRootLogger()
, но я в растерянности, что бы это могло быть.
Как это исправить, log4j обнаруживает его реализацию, и я могу программно установить уровень ведения журнала без получения исключения?
FWIW, вот ссылка на проект (без файла конфигурации log4j или использования Configurator
), но я бы предпочел общий ответ, так как у меня есть еще один проект, который также требует обновления до log4j 2.