【问题标题】:Log4j2 WebLookup not getting resolvedLog4j2 WebLookup 没有得到解决
【发布时间】:2013-09-30 22:31:29
【问题描述】:

我有如下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 创建附加程序失败。我查看了 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。

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

【问题讨论】:

    标签: lookup log4j2


    【解决方案1】:

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

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

    【讨论】:

    • servlet 2.5环境有必要吗?
    【解决方案2】:

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

    可能是当将 Tomcat 作为 Eclipse 插件运行时,并非所有 ${web:...} 环境变量都设置正确。当您在 Tomcat 独立环境中使用上述设置运行时,我希望一切正常,您能验证一下吗?

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

    【讨论】:

    【解决方案3】:

    解决方案实际上是按照

    中描述的步骤进行的

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

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

    我只是不知何故错过了这篇文档(顺便说一句,这很好)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-18
      • 2011-01-14
      • 2022-01-16
      • 2021-05-14
      • 2015-04-03
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多