你能幫我找出我的配置丟失的步驟嗎?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>
在此先感謝您的幫助。
嘗試把它'WEB-INF/classes',而不是'WEB-INF' –
我會嘗試,但你能告訴我什麼是做這個的意義?我的意思是web-inf/classes不是在編譯時生成的? – LMG
確定這個工作,謝謝!無論如何,它似乎很奇怪我沒有把它放在那裏: - \ – LMG