log4j2错误:无法识别格式说明符[t]。

11

我有一个log4j2配置文件,用于运行在Tomcat 8上的Web应用程序,看起来像这样:

<?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

当Web应用程序部署并初始化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.

我的 Web 应用程序中除其他文件外,具有以下 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的一个bug https://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 - Kohei TAMURA
3个回答

7

我只在classpath包含多个Log4j2版本时看到过类似的情况。不过我没有调查找到根本原因。


如果您使用maven-shade-plugin构建一个fat jar,那么maven-shaded-log4j-transformer插件可能会有所帮助:https://github.com/edwgiz/maven-shaded-log4j-transformer - Tim Van Laer

5
如果您正在使用ShadowJar和Gradle,并且没有像其他答案所假定的多个Log4J版本,请尝试以下内容解决问题(需要Shadow Plugin> 4.0.0,否则请参见this Plugin):

build.gradle

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

shadowJar{
    transform(Log4j2PluginsCacheFileTransformer)
}

1

当我有多个版本的log4j2运行时,我也遇到了这个问题。检查您的依赖项是否拉取了重复的JAR包。祝你好运!使用类加载器可能会成为噩梦!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接