2017-03-27 8 views
1

내 웹 응용 프로그램에서 로깅 목적으로 Log4j2를 사용하고 있습니다. 간단한 자바 클래스를 만들고 내 로거를 호출하면 완벽하게 작동하고 파일에 로그를 인쇄합니다. 그러나 서블릿 클래스에서 동일한 작업을 수행하면 작동하지 않습니다. 설명서에 지정된대로 web.xml의 log4j2와 관련된 항목을 구성하지 않았습니다. web.xml을위한서블릿 3.0의 Log4j2 사용

코드 : 서블릿 클래스의

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
<display-name>SampleWebApp</display-name> 
<welcome-file-list> 
<welcome-file>Welcome.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 

로깅 코드 :이 추가 한 이후

public class MyServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 
private static final Logger log=LogManager.getLogger(MyServlet.class); 

내가 명시 적으로, WEB-INF 폴더에 log4j2.xml 파일을 배치하지 않은 클래스 패스에있는 파일은 자동으로 프로젝트를 빌드 한 후 WEB-INF/classes에 추가됩니다.

일부 구성이 누락 되었습니까? 코드의

라인 :

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 

     log.error("i am inside servlet"); 
     /*response.getWriter().append("Served at: ").append(request.getContextPath());*/ 
     System.out.println("GET called"); 

    } 

log4j2.xml :

<?xml version="1.0" encoding="UTF-8"?> 
    <Configuration> 
     <Appenders> 
     <Console name="Console"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </Console> 
     <File name="MyFile" filename="C:/Users/jasleen_kathuria/Documents/logs/info.log"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
     </Appenders> 
<Loggers> 
<logger name="MyServlet" level="TRACE"> 
     <AppenderRef ref="MyFile"/> 
    </logger> 
</Loggers> 
+0

"작동하지 않습니다."여전히 SA에서 가장 좋은 오류 설명입니다 ... 오류가 무엇인지 알 수 있습니까? 컴파일러 오류, 런타임 오류 또는 로거가 로그 파일에 액세스 할 수없는 경우 서버에서 로그 파일을 찾을 수 없습니까? :) – xander

+0

이것은 이상하지만 나는 어떤 오류도 내지 않고있다! 로그가 생성되지 않는다는 것입니다. –

+0

패키지의 MyServlet 클래스입니다. 그렇다면 _full name_을 로거 구성에 넣어야합니다. – minus

답변

0

당신은 말을해야 적어도 당신은/구축하여 웹 응용 프로그램을 배포하는 방법을하는에 서블릿 컨테이너, 어떻게 당신에게 을 클래스 경로에을 추가하십시오.

같은 문제는 WEB-INF/lib에 log4j2 jar를 추가하지 않았거나 WEB-INF/classes에 구성을 추가하지 않았다는 것입니다.

간단한 자바 클래스를 호출하면 웹 응용 프로그램의 다른 클래스 경로를 사용하게됩니다.

log4j2.jar이 배포되었는지 확인하십시오. 예를 들어 전쟁 빌드를 빌드하여 포함 된 내용을 볼 수 있습니다.

+0

이 세부 사항을 놓쳐서 죄송합니다. Tomcat 8.5를 사용하고 있으며 log4j2 (core 및 api)에 대한 2 개의 기본 jar 파일을 WEB-INF/lib 폴더에두고 구성 파일도 WEB-INF/classes 폴더에 있습니다. . 내 프로젝트를 WAR 파일로 내보내 Tomcat web-apps 폴더에 저장한다. –

+0

최소한 실제 오류 (있는 경우)를 게시하고 작동하지 않는 로거를 사용하여 코드 줄을 표시하십시오. – minus

+0

ajax 호출을 통해 내 서블릿을 호출합니다.ajax 호출은 성공했지만 로깅 코드는 실행되지 않으며 컴파일 또는 런타임 오류가 발생합니다. –

0

Tomcat을 재시작하고 브라우저 캐시를 지운 후에 문제가 해결되었습니다. 이제 로그가 인쇄되는 것을 볼 수 있습니다.