«Пожалуйста, добавьте log4j-core в classpath», за которым следует ClassCastException в Configurator.setRootLevel () - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь обновить старый проект 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.

...