Tomcat을 사용하여 Java webapp를 배포하고 있습니다. java.lang.NoClassDefFoundError : Lorg/apache/logging/log4j/Logger; 하지만 유물이 존재합니다
나는 짧은에, 매우 긴 스택 트레이스를 얻을 :GRAVE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/new-webapp]]
[...]
Caused by: java.lang.NoClassDefFoundError: Lorg/apache/logging/log4j/Logger;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2509)
at java.lang.Class.getDeclaredFields(Class.java:1819)
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:256)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationFilterAnnotations(WebAnnotationSet.java:105)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:64)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:335)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:782)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:306)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:95)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5150)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1139)
... 20 more
[...]
이제 오류가 꽤 분명하다. 어떤 이유로 log4j 번들이 클래스 경로에 없습니다.
응용 프로그램은 받는다는 웹 애플리케이션이며, pom.xml 파일은 다음과 같이이다 :
나는> Libraries-에서 프로젝트 속성으로 이동 메이븐 종속성 내가이 나타나면<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wb</groupId>
<artifactId>new-webapp</artifactId>
<packaging>war</packaging>
<version>0.0.1</version>
<properties>
<log4j.version>2.5</log4j.version>
</properties>
<dependencies>
[...]
<!-- Logging -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
[...]
</project>
:
라이브러리가 발견되어 다운로드되었으며 클래스 경로에 있습니다.
가 나는 또한 내 프로젝트 내에서 자바 클래스를 열고org.apache.logging.log4j.Logger Logger;
없음 오류를 선언하는 시도는 Logger
인터페이스가 발견된다.
여기 무슨 일 이니? 라이브러리가 클래스 경로에 있더라도 Tomcat이 시작되지 않는 이유는 무엇입니까? -
편집이 log4j 구성 파일입니다
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
이미지가 보이지 않지만 이클립스가 맞습니까? IDE 내부 또는 외부 Tomcat에 배치하고 있습니까? IDE 내부에서는 서버와 프로젝트 및 임시 파일을 모두 지우고 최신 m2e 및 m2e-wtp를 사용해야합니다. 'mvn clean package'로 전쟁을 패키지한다면'WEB-INF/lib' 안에 라이브러리가 존재합니까? – Tunaki
@ Tunaki 저는 Eclipse 내부에 배포 중이며 이미 Tomcat, Project 및 Tomcat 작업 디렉토리를 모두 정리하려고했습니다. Eclipse 서버 경로에서 wtpwebapps 아래로 이동하면 WEB-INF/lib 아래에 세 개의 jog4j jar가 표시됩니다. – BackSlash
이것을 확인하십시오. tomcat8과 log4j를 사용하는 동안 따라야 할 단계가 많이 있습니다. https://tomcat.apache.org/tomcat-8.0-doc/logging.html – piyushj