Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j2weblookup_Java_Tomcat_Log4j2 - Fatal编程技术网

Java log4j2weblookup

Java log4j2weblookup,java,tomcat,log4j2,Java,Tomcat,Log4j2,我在Servlet3.0Web应用程序中使用log4j2(2.0.2),运行在Tomcat8.0.12中。我正在尝试使用weblookup获取web应用程序上下文路径,以用作日志文件名的一部分。(我们使用属性在几个不同的上下文下运行同一个war文件) log4j2.xml文件包括 <RollingFile name="Web" fileName="/srv/dnsnet/logs/web-${web:contextPath}.logfile" filePattern="/s

我在Servlet3.0Web应用程序中使用log4j2(2.0.2),运行在Tomcat8.0.12中。我正在尝试使用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>

%d%-5p[%25.25t]%40.40c{3.}%15X{sysid}%m%n
但是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
位于org.apache.logging.log4j.core.LoggerContext.(LoggerContext.java:114)
位于org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:218)
位于org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:113)
位于org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:80)
位于org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:82)
位于org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:37)
位于org.apache.logging.log4j.LogManager.getContext(LogManager.java:269)
位于org.apache.logging.log4j.jcl.LogFactoryImpl$PrivateManager.getContext(LogFactoryImpl.java:108)
在org.apache.logging.log4j.jcl.LogFactoryImpl.getLoggersMap(LogFactoryImpl.java:52)上
位于org.apache.logging.log4j.jcl.LogFactoryImpl.getInstance(LogFactoryImpl.java:43)
位于org.apache.logging.log4j.jcl.LogFactoryImpl.getInstance(LogFactoryImpl.java:75)
位于org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
位于org.apache.myfaces.webapp.AbstractMyFacesListener。(AbstractMyFacesListener.java:34)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:408)
位于java.lang.Class.newInstance(Class.java:433)
位于org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:151)
位于org.apache.catalina.core.ApplicationContext.addListener(ApplicationContext.java:1231)
位于org.apache.catalina.core.ApplicationContextFacade.addListener(ApplicationContextFacade.java:647)
在org.apache.jasper.servlet.JasperInitializer.onStartup上(JasperInitializer.java:110)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5164)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
位于org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:581)
位于org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1686)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:745
但是ClassLoaderContextSelector总是为外部上下文传递null,所以看起来好像我遗漏了什么


有人能指出我做错了什么或遗漏了什么吗?我必须指定不同的ContextSelector吗?

您可能在log4j中发现了一个错误。我怀疑是Commons日志和WebLookup的组合不起作用。您能验证是否是这种情况吗(如果应用程序使用log4j 2 API而不是Commons日志记录,请检查WebLookup是否有效)并在log4j2 Jira中提交错误报告?

谢谢。我无法更改真实的应用程序,因为它太大了,并且有各种各样的依赖关系,我无法控制。但我会尝试创建一个简单的测试应用程序来调查你的建议。我的简单应用程序也不起作用。webapp中唯一的jar是log4j core、log4j api和log4j web。我也有d在Tomcat 7.0.55下,我的主应用程序最初确实解决了weblookup问题,但只有在它记录org.apache.myfaces.webapp.AbstractFaceSinitalizer“ServletContext'xyz'初始化”时才会解决。之后,weblookup失败。但在Tomcat 8.0.12下,它永远不起作用。仍在挖掘…在我的简单应用程序中,我发现weblookup仅在web.xml中有元素时才起作用。这听起来不对,因为从XSD中可以看到,显示名称是可选的。哇!那么一定要为此提交错误报告。