2013-09-25 41 views
2

我有以下log4j2配置Log4j2 WebLookup沒有得到解決

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="TRACE"> 
    <Appenders> 
     <RollingRandomAccessFile name="SQLTiming" fileName="${web:rootDir}/log/SQLTiming.log" 
      filePattern="${web:rootDir}/log/SQLTiming-%d{yyyy-MM-dd}.log"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{2} - %msg%n" /> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
      </Policies> 
     </RollingRandomAccessFile> 
     <Console name="CONSOLE"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{2} - %msg%n" /> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Logger name="jdbc.sqltiming" level="info" additivity="false"> 
      <AppenderRef ref="SQLTiming" /> 
     </Logger> 
     <Root level="error"> 
      <AppenderRef ref="CONSOLE" /> 
     </Root> 
    </Loggers> 
</Configuration> 

當我嘗試通過SLF4J

protected static Logger logger = LoggerFactory.getLogger(DbConn.class); 

Log4j的失敗創造一個appender得到記錄器。我查看了log4j2源代碼,它試圖創建文件C:\Program Files\eclipse\${web:rootDir}\log\SQLTiming.log(它沒有做到),所以看起來log4j沒有處理查找。

我在Tomcat 7.0.4中運行應用程序,並使用http://logging.apache.org/log4j/2.x/manual/lookups.html建議的語法。 我已經嘗試使用$$ {web:rootDir}(帶有2 $標記),導致其中一個$ -s被刪除,但查找仍未成功。實際上,沒有其他查找成功(例如,環境變量)。 Log4j版本是2.0 beta9。

有沒有人看過類似的東西?我錯過了什麼嗎?

回答

0

你是單獨運行在Tomcat中,還是運行在Eclipse插件中?如果Log4J找不到查找的值,它將創建一個名稱中具有該模式的文件(這就是您所看到的)。所以查找失敗。它試圖創建的文件在Eclipse安裝目錄下,dir告訴我你正在運行的進程是Eclipse,而不是Tomcat。你使用哪個插件?

當Tomcat作爲Eclipse插件運行時,可能並不是所有的$ {web:...}環境變量都設置正確。當你在Tomcat standalone中運行上述設置時,我希望事情能夠正常工作,你能驗證這一點嗎?

我不確定Log4J團隊可以對此做任何事情,但您可以嘗試在https://issues.apache.org/jira/browse/LOG4J2處提出此問題。您也可以嘗試聯繫Eclipse Tomcat插件的作者。

1

對於servlet 3.0容器,你必須配置log4jContextNameweb.xml如下:

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