SLF4J: java.lang.IllegalStateException: org.slf4j.LoggerFactory не может быть успешно инициализирован - PullRequest
1 голос
/ 14 марта 2012

В моем файле pom есть следующая зависимость maven:

<!-- depends on slf4j-api, log4j -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>
</dependency>

Когда я внедряю проект в tomcat, я получаю сообщение об ошибке:

SEVERE: Exception sending context destroyed event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.ExceptionInInitializerError
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:80)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4819)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5466)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.IllegalStateException: org.slf4j.LoggerFactory could not be successfully initialized. See also http://www.slf4j.org/codes.html#unsuccessfulInit
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:288)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
    at org.springframework.web.context.ContextCleanupListener.<clinit>(ContextCleanupListener.java:43)
    ... 16 more

Когда я смотрю на развернутый файл войны, я вижу в файле войны следующие файлы (среди прочих):

slf4j-api-1.6.4.jar
slf4j-log4j12-1.6.4.jar

Странно то, что я не вижу там log4j.jar (хотя это зависимость slf4j-log4j12-1.6.4.jar

Вопросы:

  1. Почему log4j.jar не было упаковано в файл войны?

  2. Что означает сообщение об ошибке и как его решить?

Ответы [ 4 ]

2 голосов
/ 21 августа 2012

У меня была эта проблема из-за плохого файла JAR в хранилище. Удаление всего каталога log4j в репозитории Maven исправило это после того, как я выполнил Maven> Обновление зависимостей, и он заново загрузил их.

enter image description here

1 голос
/ 14 марта 2012

Простая вещь, потому что вы не указали это как зависимость в вашем pom, потому что slf4j - это фасад ведения журнала, что означает, что вы должны дать реальную реализацию с ним. Сообщение об ошибке дает подсказку для объяснения причины этой ошибки.

0 голосов
/ 06 мая 2016

Кажется, что вам нужно понизить ваш проект до slf4j 1.4.2 для работы с log4j, доступным в вашем tomcat. Они двоичные несовместимы. Вы также можете придерживаться предоставленного списка, поэтому не включайте их дважды.

Альтернатива состоит в том, чтобы другой проект включал сами библиотеки и удалял из tomcat common. Я не знаю другого механизма исключения для кота.

Для справки, и, вероятно, бесполезно, я в настоящее время развертываю на weblogic, и у него есть спецификация развертывания, которая позволяет исключать общие классы сервера и использовать вместо этого связанные классы, такие как приведенный ниже фрагмент (со ссылкой)

0 голосов
/ 02 августа 2012

Я тоже получил эту ошибку, и у меня действительно был log4j.jar в моем файле войны. Но в моем случае это оказалось проблемой загрузчика классов: в моей общей папке / lib был jar, который пытался войти в систему с slf4j, но у этого загрузчика классов не было доступно log4j.

...