Log4j2 WebLookup没有得到解决

问题描述:

我有以下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。

有没有人看过类似的东西?我错过了什么吗?

将该溶液真以下在

http://logging.apache.org/log4j/2.x/manual/webapp.html

描述的步骤

(我的应用程序是在一个servlet 2.5容器中运行)我刚种种原因错过这片文档(其由具有优异的方式)

你是单独运行在Tomcat中,还是运行在Eclipse插件中?如果Log4J找不到查找的值,它将创建一个名称中具有该模式的文件(这就是您所看到的)。所以查找失败。它试图创建的文件在Eclipse安装目录下,dir告诉我你正在运行的进程是Eclipse,而不是Tomcat。你使用哪个插件?

当Tomcat作为Eclipse插件运行时,可能并不是所有的$ {web:...}环境变量都设置正确。当你在Tomcat standalone中运行上述设置时,我希望事情能够正常工作,你能验证这一点吗?

我不确定Log4J团队可以对此做任何事情,但您可以尝试在https://issues.apache.org/jira/browse/LOG4J2处提出此问题。您也可以尝试联系Eclipse Tomcat插件的作者。

对于servlet 3.0容器,你必须配置log4jContextNameweb.xml如下:

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