簡體   English   中英

Log4j2 WebLookup

[英]Log4j2 WebLookup

我正在Tomcat 8.0.12中運行的Servlet 3.0 Web應用程序中使用log4j2(2.0.2)。 我正在嘗試使用weblookup來獲取Web應用程序上下文路徑以用作日志文件名的一部分。 (我們使用屬性對其進行配置,在幾個不同的上下文中運行相同的war文件)。

log4j2.xml文件包括

        <RollingFile name="Web" fileName="/srv/dnsnet/logs/web-${web:contextPath}.logfile" filePattern="/srv/dnsnet/logs/web-${web:contextPath}-%d{yyyy-MM-dd}-%i.log.gz" append="true" immediateFlush="false">
        <PatternLayout>
            <Pattern>%d %-5p [%25.25t] %40.40c{3.} %15X{sysid} %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
        </Policies>
        <DefaultRolloverStrategy max="8"/>
    </RollingFile>

但是web:contextPath沒有得到解決。 我的Web應用程序中有log4j-web-2.0.2.jar。 我向WebLookup類添加了一些消息,問題是LoggerContext的外部上下文為null。

因此,我試圖查看在何處創建LoggerContext。 調用LoggerContext構造函數時的堆棧跟蹤為

at org.apache.logging.log4j.core.LoggerContext.<init>(LoggerContext.java:114)
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:218)
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:113)
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:80)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:82)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:37)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:269)
    at org.apache.logging.log4j.jcl.LogFactoryImpl$PrivateManager.getContext(LogFactoryImpl.java:108)
    at org.apache.logging.log4j.jcl.LogFactoryImpl.getLoggersMap(LogFactoryImpl.java:52)
    at org.apache.logging.log4j.jcl.LogFactoryImpl.getInstance(LogFactoryImpl.java:43)
    at org.apache.logging.log4j.jcl.LogFactoryImpl.getInstance(LogFactoryImpl.java:75)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
    at org.apache.myfaces.webapp.AbstractMyFacesListener.<clinit>(AbstractMyFacesListener.java:34)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at java.lang.Class.newInstance(Class.java:433)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:151)
    at org.apache.catalina.core.ApplicationContext.addListener(ApplicationContext.java:1231)
    at org.apache.catalina.core.ApplicationContextFacade.addListener(ApplicationContextFacade.java:647)
    at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:110)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5164)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1686)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745

但是ClassLoaderContextSelector始終為外部上下文傳遞null。 所以看起來好像我缺少什么。

誰能說出我做錯了什么或想念什么? 我是否必須指定其他ContextSelector?

您可能在log4j中發現了一個錯誤。 我懷疑是Commons Logging和WebLookup的組合不起作用。 您可以驗證是否是這種情況(如果您的應用程序使用log4j 2 API而不是Commons Logging來檢查WebLookup是否工作)並在log4j2 Jira 問題跟蹤器中提交錯誤報告?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM