Şu anda Tomcat üzerinde çalışan WebApps üzerinde Log4J2 kullanıyorum. Her webapp, günlüklerini webapp'ın içeriği gibi adlandırılan tek bir klasöre itmek zorundadır.Her içerik için Log4J
Webapp'da, Webapp Bağlamı hazır olduğunda fark edilen bir ServletContextListener uyguladım. Böyle sistem özelliğine günlüğü yolunu ayarlar:
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");
}
Sonra log4j2.xml bu özelliği kullanın: İlk webapp dağıtmak, bu iyi çalışır
<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>
. Ancak, iki veya daha fazla dağıtımı tamamladığım zaman, tüm bağlamlardan tüm günlükler en yeni klasöre gider, çünkü sistem özelliği tüm örneklerde geneldir. Bazen bazı günlüklerin yazıldığı "{sys: WebappContext}" adında bir klasör bile alırım.
İstediğim günlük bilgisine ulaşmanın doğru yolu nedir?
'contextPath' işini yaptı, teşekkürler! Gelecek okuyucular için: ayrıca bağımlılık log4j-web (sürüm 2.5 veya üstü) olduğundan emin olun! – user3774337