Log4j2 WebLookup未得到解决

Log4j2 WebLookup未得到解决,lookup,log4j2,Lookup,Log4j2,我有以下log4j2配置 <?xml version="1.0" encoding="UTF-8"?> <Configuration status="TRACE"> <Appenders> <RollingRandomAccessFile name="SQLTiming" fileName="${web:rootDir}/log/SQLTiming.log" filePattern="${web:rootD

我有以下log4j2配置

<?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>
Log4j无法创建追加器。我查看了log4j2源代码,它试图创建文件
C:\Program Files\eclipse\${web:rootDir}\log\SQLTiming.log
(它没有这样做),因此似乎log4j没有处理查找

我正在Tomcat7.0.4中运行该应用程序,并使用所建议的语法。 我尝试使用$${web:rootDir}(带有2个$marks),结果删除了其中一个$-s,但查找仍然没有成功。事实上,其他查找都没有成功(例如环境变量)。Log4j版本是2.0 beta9


还有人见过类似的吗?我遗漏了什么吗?

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

可能是在将Tomcat作为Eclipse插件运行时,没有正确设置所有${web:…}环境变量。当您在Tomcat standalone中使用上述设置运行时,我希望一切正常,您能验证这一点吗


我不确定Log4J团队对此能做些什么,但是你可以试着提出这个问题。您还可以尝试联系EclipseTomcat插件的作者。

解决方案实际上遵循了中描述的步骤

(我的应用程序在servlet 2.5容器中运行)


不知何故,我错过了这篇文档(顺便说一句,这篇文档非常棒)

对于
servlet 3.0
容器,您必须在
web.xml
中配置
log4jContextName
,如下所示:

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

log4jContextName
log4jContext

servlet 2.5环境是否需要它?weblogic 12c上也出现类似问题。在部署期间,weblogic尝试使用${web..}创建一个文件,但由于log4j2 web查找未初始化,它会抛出错误,即无法创建具有给定名称的文件…用于引用-1的链接。2.
<context-param>
    <param-name>log4jContextName</param-name>
    <param-value>log4jContext</param-value>
</context-param>