現在Tomcatで動作するWebAppsでLog4J2を使用しています。各Webアプリケーションは、Webアプリケーションのコンテキストと同じ名前の個々のフォルダにログをプッシュする必要があります。各コンテキストのLog4J
webappでは、Webapp Contextの準備ができたときに気付くServletContextListenerを実装しました。これは、このようなシステムプロパティへのログのパスを設定します。
public void contextInitialized(ServletContextEvent sce) {
context = sce.getServletContext().getContextPath();
if(context == null || context.isEmpty()){
context = "ROOT";
}
System.setProperty("WebappContext", context);
log.info("Context \"" + context + "\" erstellt");
}
それから私はlog4j2.xmlでこのプロパティを使用します。私は最初にWebアプリケーションをデプロイするとき
<Properties>
<Property name="log-path">/srv/tomcat/logs/${sys:WebappContext}</Property>
</Properties>
<Appenders>
<RollingFile name="rollingLogFile" fileName="${log-path}/out.log"
filePattern="${log-path}/out-%d{MMM-dd--HH-mm}.log" >
...
</RollingFile>
これが正常に動作します。しかし、2つ以上を配備すると、すべてのコンテキストのすべてのログが最新のフォルダに移動します。これは、システムプロパティがすべてのインスタンスに対してグローバルであるためです。場合によっては、「{sys:WebappContext}」という名前のフォルダがあり、ログが書き込まれることもあります。
私が望むロギングを達成する正しい方法は何ですか?
'contextPath'は仕事をしました、ありがとう!今後の読者には:log4j-web(バージョン2.5以上)の依存関係も持っていることを確認してください! – user3774337