2016-09-22 1 views
2

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> 

:

enter image description here

라이브러리가 발견되어 다운로드되었으며 클래스 경로에 있습니다.

가 나는 또한 내 프로젝트 내에서 자바 클래스를 열고

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> 
+0

이미지가 보이지 않지만 이클립스가 맞습니까? IDE 내부 또는 외부 Tomcat에 배치하고 있습니까? IDE 내부에서는 서버와 프로젝트 및 임시 파일을 모두 지우고 최신 m2e 및 m2e-wtp를 사용해야합니다. 'mvn clean package'로 전쟁을 패키지한다면'WEB-INF/lib' 안에 라이브러리가 존재합니까? – Tunaki

+0

@ Tunaki 저는 Eclipse 내부에 배포 중이며 이미 Tomcat, Project 및 Tomcat 작업 디렉토리를 모두 정리하려고했습니다. Eclipse 서버 경로에서 wtpwebapps 아래로 이동하면 WEB-INF/lib 아래에 세 개의 jog4j jar가 표시됩니다. – BackSlash

+0

이것을 확인하십시오. tomcat8과 log4j를 사용하는 동안 따라야 할 단계가 많이 있습니다. https://tomcat.apache.org/tomcat-8.0-doc/logging.html – piyushj

답변

4

당신이 만든 설명으로, 나는 당신이 이클립스로 작업하는 가정합니다.

글쎄, Project properties ->Deployment assembly으로 가서 maven dependencies 항목이 포함되어 있는지 확인하는 것이 좋습니다.

Maven->Update Project을 실행할 때마다이 구성을 놓친 것으로 자주 실험했습니다.

+0

예전에 그런 일이있었습니다. , Maven 의존성은 WEB-INF/lib'와 함께 배포 경로 – BackSlash

+0

@BackSlash 그리고 log4j는'Maven Dependencies' 엔트리에 포함되어 있습니다, 확실한가? –

+1

예, 그림이 보여 주듯이, log4j 하나, 모든 라이브러리에서 오는 maven과 함께, 그들은 오류가 발생하지 않습니다, log4j 않습니다. 이상한. – BackSlash

0

log4j 라이브러리가 클래스로드 정책에 대해 충돌을 일으킬 수 있으므로 Tomcat 런타임 (또는 승인 된 디렉토리)에 log4j 라이브러리가 포함되어 있지 않은지 확인하십시오.

+0

Tomcat은 신선한 설치, 버전 8.0.37 어제 아파치 사이트에서 다운로드 한 . 다음은 라이브러리입니다. http://i.stack.imgur.com/nr2F2.png – BackSlash

관련 문제