【问题标题】:log4j2 ERROR Unrecognized format specifier [t]log4j2 错误无法识别的格式说明符 [t]
【发布时间】:2017-11-12 19:03:33
【问题描述】:

我有一个在 Tomcat 8 上运行的 Web 应用程序的 log4j2 配置文件,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="30" status="trace" strict="true">
        <Properties>
                <Property name="logdir">/path/to/log/dir</Property>
                <Property name="filename">somelogfile.log</Property>
        </Properties>
        <Loggers>
                <Logger name="some.package.name" level="debug" additivity="false">
                        <AppenderRef ref="RollingFile"/>
                </Logger>
        </Loggers>
        <Appenders>
                <RollingFile name="RollingFile" fileName="${logdir}/${filename}" filePattern="${logdir}/${filename}.%d{yyyyMMdd}.gz">
                        <PatternLayout>
                                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
                        </PatternLayout>
                        <Policies>
                                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                        </Policies>
                </RollingFile>
        </Appenders>
</Configuration>

我看到我的 Web 应用程序写入日志文件,但线程名称的 %t 模式似乎没有解析,所以我得到这样的日志语句

2017-06-10 20:34:51,696 DEBUG s.p.n.SomeServlet [%t] some log message

请注意,我得到的是 %t 而不是线程名称

为了解决这个问题,我使用选项启动了 Tomcat

-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE

当 webapp 正在部署并且 log4j2 正在初始化时,我在 catalina.out 中看到以下消息。

ERROR StatusLogger Unrecognized format specifier [thread]
ERROR StatusLogger Unrecognized conversion specifier [thread] starting at position 25 in conversion pattern
2017-06-10 19:51:14,277 localhost-startStop-1 DEBUG PluginManager 'Converter' found 41 plugins
2017-06-10 19:51:14,609 localhost-startStop-1 ERROR Unrecognized format specifier [t]
2017-06-10 19:51:14,614 localhost-startStop-1 ERROR Unrecognized conversion specifier [t] starting at position 6 in conversion pattern.

我的网络应用程序包含以下 jar 文件

WEB-INF/lib/log4j-api-2.8.2.jar
WEB-INF/lib/log4j-core-2.8.2.jar
WEB-INF/lib/log4j-web-2.8.2.jar

不确定是什么原因导致打印 %t 而不是实际的线程名称。

.

【问题讨论】:

  • 可能是 Log4J2 错误 issues.apache.org/jira/browse/LOG4J2-954 。但是虽然我使用 log4j 2.8.2,但我无法重现您的问题。结果就像2017-06-12 16:22:29,050 INFO s.p.name [main] some log message

标签: java logging log4j log4j2 tomcat8


【解决方案1】:

我唯一一次看到类似的情况是当类路径包含多个版本的 Log4j2 时。不过,我没有进行调查以找到根本原因。

【讨论】:

【解决方案2】:

如果您使用 ShadowJarGradle 并且您没有多个 Log4J 版本,如其他答案所假设的那样,试试这个解决问题(需要 Shadow Plugin > 4.0.0,否则请参阅this Plugin):

build.gradle

import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer

shadowJar{
    transform(Log4j2PluginsCacheFileTransformer)
}

【讨论】:

    【解决方案3】:

    当我运行多个版本的 log4j2 时,我也遇到过这种情况。检查您的任何依赖项是否拉入重复的罐子..祝你好运!类加载器可能是一场噩梦!

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 2021-01-13
      • 2021-10-24
      • 1970-01-01
      相关资源
      最近更新 更多