Log4j2 WebLookup没有得到解决

时间:2013-09-25 11:00:36

标签: 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: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。

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

当将Tomcat作为Eclipse插件运行时,并非所有$ {web:...}环境变量都设置正确。当你在Tomcat独立运行上面的设置时,我希望事情能正常工作,你可以验证这个吗?

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

答案 2 :(得分:0)

解决方案实际上是按照

中描述的步骤进行的

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

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

我只是在某种程度上错过了这篇文章(顺便说一句,这很棒)