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が出力される原因がわからない。
。
私が似たようなものを見たのは、クラスパスに複数のバージョンのLog4j2が含まれているときだけでした。しかし、根本的な原因を見つけるために調査しませんでした。
Log4j2の複数のバージョンを実行しているときに、私もこれを経験しました。依存関係のいずれかが重複したjarファイルをプルするかどうかを確認してください。頑張ってください。クラスローダーでは悪夢になる可能性があります。
ShadowJarとGradleを使用していて、複数のLog4Jバージョンがない場合想定される他の回答と同様に、問題を解決するこれを試してください(シャドウプラグイン> 4.0.0が必要です。それ以外の場合は このプラグイン を参照してください):
build.gradle
import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer
shadowJar{
transform(Log4j2PluginsCacheFileTransformer)
}