2013-11-09 78 views
3

你能幫我找出我的配置丟失的步驟嗎?log4j2配置未加載

我想添加記錄器到我非常簡單的web應用程序中:爲了這樣做,我使用了log4j2(beta9)。

我寫下了我的log4j2.xml如下

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} /%L/[%M] - %msg%n"/> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Logger name="prova.Hello" level="trace" additivity="false"> 
      <AppenderRef ref="Console"/> 
     </Logger> 
     <Logger name="servletstest.TestLogger" level="trace" additivity="false"> 
      <AppenderRef ref="Console"/> 
     </Logger> 
     <Root level="trace"> 
      <AppenderRef ref="Console"/> 
     </Root> 
    </Loggers> 
</Configuration> 

,我把它放在WEB-INF文件夾中。

我有那麼一個簡單的servlet,其執行以下操作

response.setContentType("text/html;charset=UTF-8"); 
PrintWriter out = response.getWriter(); 
try { 
    /* TODO output your page here. You may use following sample code. */ 
    out.println("<!DOCTYPE html>"); 
    out.println("<html>"); 
    out.println("<head>"); 
    out.println("<title>Servlet TestLogger</title>");    
    out.println("</head>"); 
    out.println("<body>"); 
    out.println("<h1>Servlet TestLogger at " + request.getContextPath() + "</h1>"); 
    out.println("</body>"); 
    out.println("</html>"); 
    logger.error("error"); 
    logger.info("info"); 
    logger.trace("trace"); 
    logger.debug("debug"); 
} finally { 
    out.close(); 
} 

正如你可以看到它也只是一種嘗試,看看是否記錄儀正常工作,但事實並非如此。 通過閱讀這裏web app我並不需要配置我的應用程序的web.xml文件,因爲它運行的servlet 3.0,事實上如果我嘗試添加配置我碰到下面的錯誤

javax.servlet.UnavailableException: In a Servlet 3.0+ application, you must not define a log4jServletFilter in web.xml. Log4j 2 defines this for you automatically. 

但它似乎不加載log4j2配置文件,因爲我excpect輸出類似於

10:57:55.490 [http-bio-8084-exec-5] ERROR servletstest.TestLogger - error 
10:57:55.490 [http-bio-8084-exec-5] INFO servletstest.TestLogger - info 
10:57:55.490 [http-bio-8084-exec-5] TRACE servletstest.TestLogger - trace 
10:57:55.490 [http-bio-8084-exec-5] DEBUG servletstest.TestLogger - debug 

,而不是我得到的只有

10:57:55.490 [http-bio-8084-exec-5] ERROR servletstest.TestLogger - error 

看起來是無法加載xml文件,並且默認情況下會將記錄器級別設置爲僅出錯。 在同一網頁的編寫

在Tomcat的7 < 7.0.43您需要更改catalina.properties從jarsToSkip屬性中刪除「的log4j的* .jar」。如果他們跳過掃描Log4j JAR文件,您可能需要在其他容器上執行類似的操作。

所以我編輯了catalina.properties具有因我運行Tomcat 7.0.41和我刪除從jartoskip財產的log4j的* .jar。

我在做什麼錯?

通過在web.xml的方式,我有這個

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <display-name>test</display-name> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>prova</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet> 
     <servlet-name>TestLogger</servlet-name> 
     <servlet-class>servletstest.TestLogger</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>TestLogger</servlet-name> 
     <url-pattern>/TestLogger</url-pattern> 
    </servlet-mapping> 
    <listener> 
     <listener-class>org.apache.logging.log4j.core.web.Log4jServletContextListener</listener-class> 
    </listener> 

</web-app> 

你可以看到,version爲2.5,而不是3.0正確,這也許是在某種程度上影響了我嗎?或球衣配置?

編輯: 我再次嘗試並將web.xml更改爲以下爲了具有3.0的Web應用程序版本,但它不會加載配置..我做錯了什麼?

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <servlet> 
     <servlet-name>Prova</servlet-name> 
     <servlet-class>test.Prova</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Prova</servlet-name> 
     <url-pattern>/Prova</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
</web-app> 

在此先感謝您的幫助。

+0

嘗試把它'WEB-INF/classes',而不是'WEB-INF' –

+0

我會嘗試,但你能告訴我什麼是做這個的意義?我的意思是web-inf/classes不是在編譯時生成的? – LMG

+0

確定這個工作,謝謝!無論如何,它似乎很奇怪我沒有把它放在那裏: - \ – LMG

回答

2

正如我在評論中猜到的,它需要放在WEB-INF/classes而不是WEB-INF

+0

他們給出答案,你得到的點 – Salandur

+0

不,我原來給出了答案。 –

+0

@Salandur這裏發生了什麼事?第一個評論來自作者的答案.. – LMG

1

如果您使用eclipse ide進行開發,可以將log4j2.xml文件放在src文件夾中。

enter image description here