2017-03-27 93 views
1

我在我的web應用程序中使用Log4j2進行日誌記錄。 如果我創建了任何簡單的java類並調用我的記錄器,它可以很好地工作,並將日誌打印到文件中。但是,如果我在servlet類中執行相同的操作,則不起作用。 正如文檔中所指定的,我沒有在web.xml中配置任何與log4j2相關的東西。在servlet 3.0中使用Log4j2

代碼的web.xml:在Servlet類

<?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文件,因爲我加入了這個文件放在classpath中,在我構建項目後它會自動添加到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應用程序,在其servlet容器,以及如何將類添加到類路徑中。

總而言之,主要問題可能是您沒有在WEB-INF/lib中添加log4j2 jar,或者在WEB-INF/classes中沒有添加log4j2 jar。

當您調用簡單的java類時,您依賴於來自web-app的不同類路徑。

確保部署了log4j2.jar,例如,您可以構建該war解壓縮並查看其包含的內容。

+0

對不起,我錯過了這些細節。我使用的是Tomcat 8.5,我已經將log4j2(core和api)的兩個主jar文件放在WEB-INF/lib文件夾中,配置文件也存在於WEB-INF/classes文件夾中。我將我的項目導出爲WAR文件,並將其放置在Tomcat web-apps文件夾中。 –

+0

請至少發佈實際錯誤(如果有),並使用不起作用的記錄器顯示一行代碼。 – minus

+0

我正在通過ajax調用來調用我的servlet。ajax調用是成功的,但是日誌代碼既沒有執行,也沒有給出任何編譯或運行時錯誤。 –

0

那麼它重新啓動我的Tomcat並清除我的瀏覽器緩存後得到解決。我能夠看到正在打印的日誌。