2016-07-27 56 views
1

环境: JDK 7中,WebLogic 12.1.3.0服务器(贴片3) Maven构建系统web服务处理程序防止log4j2配置

大厦Maven的,我具有取决于一个一个web服务WAR模块定义web服务处理程序的第二个JAR模块。 Webservice模块具有一个上下文侦听器,该侦听器稍后应该从数据库初始化log4j2(循环)。 没有在任何地方定义log4j2.xml,也不需要。

问题是,当通过在webservice端点上使用@HandlerChain批注启用处理程序时,log4j2配置在Web服务上下文侦听器初始化之前会损坏。

模块DemoWebService:

@WebService(endpointInterface = "demo.IDemoWebService") 
@HandlerChain(file = "handlers.xml") 
public class DemoWebService implements IDemoWebService { 
... 
} 

public class DemoServletContextListener implements ServletContextListener { 

    /** Status Logger */ 
    private static final Logger LOG = StatusLogger.getLogger(); 

    @Override 
    public void contextInitialized(ServletContextEvent event) { 
     System.out.println("Demo listener context intialized"); 
     System.out.println(LOG.getLevel() + " - " + LOG.isDebugEnabled() + " - " + LOG.isInfoEnabled() + " - " + LOG.isWarnEnabled()); 

     LOG.info("LOG Demo listener context intialized"); 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent event) { 
     System.out.println("Demo listener context destroyed"); 
     LOG.info("LOG Demo listener context destroyed"); 
    } 
} 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 

    <display-name>DemoWebService</display-name> 

    <!-- log4j2 configuration --> 
    <context-param> 
     <param-name>isLog4jAutoInitializationDisabled</param-name> 
     <param-value>true</param-value> 
    </context-param> 

    <listener> 
     <listener-class>demo.DemoServletContextListener</listener-class> 
    </listener> 

    ... 
</web-app> 

handlers.xml

<?xml version="1.0" encoding="UTF-8"?> 
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> 
    <handler-chain> 
     <handler> 
      <handler-name>Performance</handler-name> 
      <handler-class>demo.wshandler.WebServiceDemoHandler</handler-class> 
     </handler> 
    </handler-chain> 
</handler-chains> 

模块wshandler:

public class WebServiceDemoHandler { 

    private static Logger log = LogManager.getLogger(WebServiceDemoHandler.class); 

    @Override 

    public boolean handleMessage(SOAPMessageContext context) { 
     log.info("something"); 
     return true; 
    } 

    @Override 
    public boolean handlingNotRequired() { 
     return false; // this handler always handles the message 
    } 
} 

现在,当我在部署过程中比较服务器日志一次当@HandlerChain(文件=“handlers.xml”)是活动的,有一次,当注释掉,在日志中的差异基本上下列行:

处理程序链未激活:

Demo listener context intialized 
TRACE - true - true - true 
INFO StatusLogger LOG Demo listener context intialized 

处理程序链活性:

DEBUG StatusLogger Loaded Provider Provider[priority=10, className=org.apache.logging.log4j.core.impl.Log4jContextFactory, url=zip:C:wl_homeSer_projectsdomainsbase_domain/tmp/_WL_user/DemoWebService-1.0-SNAPSHOT/3or6mr/war/WEB-INF/lib/log4j-core-2.6.jar!/META-INF/log4j-provider.properties, [email protected]2883f04f] 
DEBUG StatusLogger Loaded Provider Provider[priority=10, className=org.apache.logging.log4j.core.impl.Log4jContextFactory, url=zip:C:wl_homeSer_projectsdomainsbase_domain/tmp/_WL_user/DemoWebService-1.0-SNAPSHOT/3or6mr/war/WEB-INF/lib/log4j-core-2.6.jar!/META-INF/log4j-provider.properties, [email protected]d5bfc18 finder: [email protected] annotation: [email protected]] 
DEBUG StatusLogger Using ShutdownCallbackRegistry class org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry 
DEBUG StatusLogger Using ShutdownCallbackRegistry class org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry 
DEBUG StatusLogger Took 0,086401 seconds to load 184 plugins from [email protected] 
DEBUG StatusLogger PluginManager 'Converter' found 41 plugins 
DEBUG StatusLogger Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream 
DEBUG StatusLogger Starting OutputStreamManager SYSTEM_OUT.false-1 
DEBUG StatusLogger Starting LoggerContext[name=7d5bfc18, [email protected]]... 
DEBUG StatusLogger Reconfiguration started for context[name=7d5bfc18] at URI null ([email protected]) with optional ClassLoader: null 
DEBUG StatusLogger PluginManager 'ConfigurationFactory' found 4 plugins 
DEBUG StatusLogger Missing dependencies for Yaml support 
DEBUG StatusLogger Missing dependencies for Json support 
DEBUG StatusLogger Using configurationFactory or[email protected]83bf63b 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.properties] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.properties] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.properties] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.properties] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.yml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.yml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.yml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.yml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.yaml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.yaml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.yaml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.yaml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.json] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.json] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.json] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.json] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.jsn] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.jsn] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.jsn] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.jsn] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.xml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.xml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.xml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test7d5bfc18.xml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test.properties] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test.properties] using weblogic.utils.classloaders.Cha[email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.properties] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.properties] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test.yml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test.yml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.yml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.yml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test.yaml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test.yaml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.yaml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.yaml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test.json] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test.json] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.json] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.json] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test.jsn] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test.jsn] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.jsn] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.jsn] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2-test.xml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2-test.xml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.xml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2-test.xml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j27d5bfc18.properties] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j27d5bfc18.properties] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.properties] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.properties] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j27d5bfc18.yml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j27d5bfc18.yml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.yml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.yml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j27d5bfc18.yaml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j27d5bfc18.yaml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.yaml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.yaml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j27d5bfc18.json] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j27d5bfc18.json] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.json] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.json] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j27d5bfc18.jsn] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j27d5bfc18.jsn] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.jsn] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.jsn] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j27d5bfc18.xml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j27d5bfc18.xml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.xml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j27d5bfc18.xml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2.properties] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2.properties] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.properties] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.properties] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2.yml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2.yml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.yml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.yml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2.yaml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2.yaml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.yaml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.yaml] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2.json] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2.json] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.json] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.json] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2.jsn] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2.jsn] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.jsn] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.jsn] using ClassLoader.getSystemResource(). 
TRACE StatusLogger Trying to find [log4j2.xml] using context class loader [email protected] 
TRACE StatusLogger Trying to find [log4j2.xml] using [email protected] finder: [email protected] annotation: [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.xml] using [email protected] class loader. 
TRACE StatusLogger Trying to find [log4j2.xml] using ClassLoader.getSystemResource(). 
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 
DEBUG StatusLogger PluginManager 'Converter' found 41 plugins 
DEBUG StatusLogger Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream 
DEBUG StatusLogger Starting OutputStreamManager SYSTEM_OUT.false-2 
DEBUG StatusLogger Initializing configuration [email protected]b3 
DEBUG StatusLogger Installed script engines 
DEBUG StatusLogger juel Version: 1.0, Language: JSP 2.1 EL, Threading: MULTITHREADED, Compile: false, Names: {juel} 
DEBUG StatusLogger Oracle Nashorn Version: 1.8.0_71, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript} 
DEBUG StatusLogger Groovy Scripting Engine Version: 2.0, Language: Groovy, Threading: MULTITHREADED, Compile: true, Names: {groovy, Groovy} 
DEBUG StatusLogger PluginManager 'Core' found 100 plugins 
DEBUG StatusLogger PluginManager 'Level' found 0 plugins 
DEBUG StatusLogger Configuration [email protected]b3 initialized 
DEBUG StatusLogger Starting configuration [email protected]b3 
DEBUG StatusLogger Started configuration [email protected]b3 OK. 
TRACE StatusLogger Stopping [email protected]09... 
TRACE StatusLogger DefaultConfiguration notified 1 ReliabilityStrategies that config will be stopped. 
TRACE StatusLogger DefaultConfiguration stopping root LoggerConfig. 
TRACE StatusLogger DefaultConfiguration notifying ReliabilityStrategies that appenders will be stopped. 
TRACE StatusLogger DefaultConfiguration stopping remaining Appenders. 
DEBUG StatusLogger Shutting down OutputStreamManager SYSTEM_OUT.false-1 
TRACE StatusLogger DefaultConfiguration stopped 1 remaining Appenders. 
TRACE StatusLogger DefaultConfiguration cleaning Appenders from 1 LoggerConfigs. 
DEBUG StatusLogger Stopped [email protected]09 OK 
TRACE StatusLogger Reregistering MBeans after reconfigure. Selector=or[email protected]44387dfb 
TRACE StatusLogger Reregistering context (1/1): '7d5bfc18' [email protected] 
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=7d5bfc18' 
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=7d5bfc18,component=StatusLogger' 
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=7d5bfc18,component=ContextSelector' 
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=7d5bfc18,component=Loggers,name=*' 
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=7d5bfc18,component=Appenders,name=*' 
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=7d5bfc18,component=AsyncAppenders,name=*' 
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=7d5bfc18,component=AsyncLoggerRingBuffer' 
TRACE StatusLogger Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=7d5bfc18,component=Loggers,name=*,subtype=RingBuffer' 
DEBUG StatusLogger Registering MBean org.apache.logging.log4j2:type=7d5bfc18 
Demo listener context intialized 
TRACE - false - false - true 

这里发生的事情,是我想Java的类加载器变得活跃 Web上下文监听器之前,然后触发log4j2,不需要初始化。这会导致不可恢复的损坏log4j2配置,并且所有其他日志都将丢失。

回答

2

的答案贴出的问题很简单,包括为类DemoServletContextListener

StatusLogger.getLogger().reset(); 

StatusLogger将再次合作。 但是,损坏的整体logj4配置不能像这样解决。然而,这里省略了初始化代码,因此最多只是另一个帖子的主题 -

+0

或者如果你不在处理程序本身中使用log4j,可能太早 –

1

您是否尝试过将LOG StatusLogger字段声明为非静态的DemoServletContextListener?加载该类将导致Log4j2自行初始化。

如果你想推迟Log4j2的初始化,直到加载了WebServiceDemoHandler,那么根本不应该在DemoServletContextListener中使用StatusLogger。

另外,查看状态记录器输出的前两行,有两个类加载器,第一个([email protected])开始初始化Log4j2。

还有一个[email protected] finder: [email protected] annotation: [email protected]类加载器,显然不起作用。根据名称,该第二个类加载器用于Web应用程序。我想你想让Log4j2被第二个类加载器初始化。不确定第一个类加载器来自哪里,但这可能是进一步调查的好主角。

+0

嗨Remko!非常感谢主管的答复。 是的,我试过并将WebServiceDemoHandler中的Logger定义为非静态的。它没有帮助。 什么帮助只是没有在第二个模块wshandler中使用log4j2。 我可以通过添加以下行来让StatusLogger再次在DemoServletContextListener中工作 StatusLogger.getLogger()。reset(); 但是,上下文侦听器中应该发生的整体日志配置无法保存。 (为简洁起见,上下文侦听器中的日志初始化代码被省略了。) –

+0

不客气!希望它有助于解决这个谜团。 –

+0

Upvotes总是欢迎! ; -P –