Tomcat 8.0.3 및 log4j 2.0-rc1을 사용하여 GWT 애플리케이션 (서블릿 2.5)을 배치했습니다.Log4j2가 로그 파일을 작성하지만 쓰지 않습니다.
나는 일반적인 로그 구성 오류를 수정했지만 콘솔이나 파일에는 아무 것도 기록되지 않는다고 생각합니다. 내 web.xml을의
헤드 :
<listener>
<listener-class>org.apache.logging.log4j.core.web.Log4jServletContextListener</listener-class>
</listener>
<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.core.web.Log4jServletFilter</filter-class>
</filter>
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///C:/Users/name/Desktop/log4j2.xml</param-value>
</context-param>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
이것은 log4j2.xml 구성입니다 : 내가 추가
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%p] %c{1}: %m%n"/>
</Console>
<File name="infoFile" fileName="${sys:catalina.home}/logs/info.log" >
<PatternLayout pattern="[%p] %c{1}: %m%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<Appender-Ref ref="Console"/>
<Appender-Ref ref="infoFile"/>
</Root>
</Loggers>
</Configuration>
모두 내 메이븐 의존성에 log4j2 API와 코어와 나는 그들이 WEB-INF\classes\
에서 폭발 한 것을 볼 수 있습니다. catalina.properties의 skipJar
목록에서도 제거했습니다.
전쟁이 배포되면 localhost 또는 catalina 로그에 오류나 경고가 표시되지 않습니다.
INFO ContextListener: contextInitialized()
INFO SessionListener: contextInitialized()
INFO Log4jServletContextListener ensuring that Log4j starts up properly.
INFO Log4jServletFilter initialized.
이상한 것은이 info.log 파일을 만들었지 만에 기록되지 않습니다이다 : 이것은 로컬 호스트의 로그입니다.
나는 로그가 콘솔에 표시되는 Hibernate를 사용하고 있는데, 이것이 문제가 될 수 있습니까?
마지막으로이 내가 로거를 사용하고 방법은 다음과 같습니다
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static final Logger LOG = LogManager.getLogger(MyClass.class.getName());
public void myMethod() {
LOG.info("Logging some message");
}
'WEB-INF/classes'에 넣고 context-param을 제거하면 실제로 Log4j 컨텍스트 설정이 제공되지 않습니다. 나는 immediateFlush를 true로 설정하여 시도했지만 아무것도 기록되지 않았습니다. myMethod는 실제로 데이터베이스에서 사용자를 검색하는 메서드이며 웹 응용 프로그램에서 올바르게 표시됩니다. 모든 경우에 웹 응용 프로그램을 중지하면 다음과 같이 표시됩니다. '[null]에 대한 LoggerContext 제거 중입니다. 정상입니까? – Aerus
전개 된 전쟁을 조사한 후, 방금 변경 한 모든 내 .class 파일이 5 일이라는 것을 알았습니다. 그래서 메소드 *가 실제로 호출되었지만 5 일 된 버전에는 로깅이 없으므로 아무 것도 기록되지 않았습니다. MyClass.class를 수동으로 추가하고 webapp를 다시로드하면 로깅됩니다.이제 Maven 배포 프로세스를 수정하는 중 ... – Aerus