web-dev-qa-db-ja.com

log4j2ERROR認識されないフォーマット指定子[t]

Tomcat8で実行されている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.

私の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が出力される原因がわからない。

10
pushNpop

私が似たようなものを見たのは、クラスパスに複数のバージョンのLog4j2が含まれているときだけでした。しかし、根本的な原因を見つけるために調査しませんでした。

5
Remko Popma

Log4j2の複数のバージョンを実行しているときに、私もこれを経験しました。依存関係のいずれかが重複したjarファイルをプルするかどうかを確認してください。頑張ってください。クラスローダーでは悪夢になる可能性があります。

1
killjoy

ShadowJarGradleを使用していて、複数のLog4Jバージョンがない場合想定される他の回答と同様に、問題を解決するこれを試してください(シャドウプラグイン> 4.0.0が必要です。それ以外の場合は このプラグイン を参照してください):

build.gradle

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

shadowJar{
    transform(Log4j2PluginsCacheFileTransformer)
}
0