2014-02-20 76 views
8

我試圖建立LOG4J根據文件(和SO問題有關),但它不應該創建文件,但有這樣的日誌中WildFly:Log4J2配置3.0的servlet

No Log4j context configuration provided. This is very unusual 

的web.xml

<web-app 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" 
     version="3.0"> 

<context-param> 
     <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/classes/log4j2.xml</param-value> 
</context-param> 

app.war/WEB-INF /類/ log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration monitorInterval="30"> 
    <!-- http://logging.apache.org/log4j/2.x/manual/configuration.html --> 
    <Properties> 
     <Property name="filename">c:/oauth.log</Property> 
    </Properties> 

    <Filter type="ThresholdFilter" level="trace"/> 

    <Appenders> 
     <Appender type="File" name="File" fileName="${filename}"> 
      <Layout type="PatternLayout"> 
       <Pattern>%d %p %C{1.} [%t] %m%n</Pattern> 
      </Layout> 
     </Appender> 
     <File name="MyFile" fileName="c:/oauth2.log" immediateFlush="true"> 
      <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
    </Appenders> 

    <Loggers> 
     <Logger name="cz.literak.demo" level="debug" additivity="true"> 
      <AppenderRef ref="File"/> 
     </Logger> 
     <Root level="error"> 
      <AppenderRef ref="MyFile"/> 
     </Root> 
    </Loggers> 

</Configuration> 

app.war/WEB-INF/lib中

commons-logging-1.1.3.jar 
json-smart-1.1.1.jar 
log4j-api-2.0-rc1.jar 
log4j-core-2.0-rc1.jar 
log4j-jcl-2.0-rc1.jar 

你能告訴我什麼是錯?我試圖在web.xml中註釋掉上下文參數,並依賴於自動配置,但沒有任何變化。

編輯

當我添加以下代碼

<context-param> 
    <param-name>log4jContextName</param-name> 
    <param-value>oauthDemo</param-value> 
</context-param> 

失敗不同的(我沒有時間,現在調查)

07:41:29,269 INFO [io.undertow.servlet] (MSC service thread 1-12) Log4jServletContainerInitializer starting up Log4j in Servlet 3.0+ environment. 
07:41:29,644 INFO [stdout] (MSC service thread 1-12) 2014-02-20 07:41:29,643 ERROR FileManager (c:/oauth2.log) java.io.FileNotFoundException: c:\oauth2.log (Přístup byl odepřen) 
07:41:29,646 INFO [stdout] (MSC service thread 1-12) 2014-02-20 07:41:29,645 ERROR Unable to invoke method createAppender in class org.apache.logging.log4j.core.appender.FileAppender for element File 07:41:29,647 INFO [stdout] (MSC service thread 1-12) at org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(BaseConfiguration.java:913) 
+2

使用正確的'context-param'。它應該是'log4jConfiguration'而不是'log4jConfigLocation'。請參閱http://logging.apache.org/log4j/2.x/manual/webapp.html#Servlet-3.0。 –

+0

log4jConfiguration:無法訪問/WEB-INF/classes/log4j2.xml java.lang.IllegalArgumentException:URI不是絕對的。 log4jConfigLocation能夠從war中讀取配置。當我更改日誌位置時,它失敗了一些語法錯誤。 –

+0

我試圖完全依靠自動配置,所以我在web.xml中註釋掉了LOG4J的東西。配置工作,但警告仍然顯示「沒有提供Log4j上下文配置,這是非常不尋常的」:-( –

回答

4

的Log4J將尋找log4j2.xml配置文件在類路徑中,除非指定了一個位置。 您是否試過而不是指定log4j2.xml文件的位置(即,從web.xml刪除context-param東西),並且僅僅依靠將該配置放入類路徑中? (app.war/WEB-INF/classes/log4j2.xml看起來好像沒什麼問題)

注意文件必須被命名爲log4j2.xml,而不是log4j.xml

+0

是的,我做了,我從web.xml中刪除了所有的參數,它仍然沒有工作,我試着log4j2 Logger和這個一個人工作,所以我意識到這個問題是在圖書館集成共享。我提交了一個缺陷:https://issues.apache.org/jira/browse/LOG4J2-546,它提供了可以重現問題的最小應用程序。 –

6

作爲參考這個網頁介紹瞭如何配置Log4j2:

https://logging.apache.org/log4j/2.x/manual/webapp.html#ContextParams

在我來說,我還沒有配置在web.xml中任何的context-param。我不得不這樣做的唯一的事情就是設置顯示名稱:

<display-name>My Admin API</display-name> 

我也使用的XML文件,而不是log4j2.yaml和文件是不是戰爭裏面。另外請注意,在這個頁面https://logging.apache.org/log4j/2.x/manual/webapp.html他們說有一個版本的Tomcat < 7.0.43有問題。所以要麼你必須使用更新版本的特定配置。

+0

對我來說,它也是通過添加顯示名稱來修復的。 – lazlev