【问题标题】:log4j configuration with jboss7 issue带有 jboss7 问题的 log4j 配置
【发布时间】:2012-12-02 12:12:48
【问题描述】:

java代码

 public static synchronized void init(String log4jXMLPath) //throws ServletException
   {
      try
      {
         if (!initialized) // set the global RepositorySelector
         {
            defaultRepository = LogManager.getLoggerRepository();
            RepositorySelector theSelector = new AppRepositorySelector();
            **LogManager.setRepositorySelector(theSelector, guard);**
            initialized = true;
         }
         Hierarchy hierarchy = new Hierarchy(new RootLogger(Level.DEBUG));
         //loadLog4JConfig(servletContext, hierarchy);
         loadLog4JConfig(hierarchy, log4jXMLPath);
         ClassLoader loader = Thread.currentThread().getContextClassLoader();
         repositories.put(loader, hierarchy);
      }
      catch (Exception e)
      {

         e.printStackTrace();
      }
   }

LogManager.setRepositorySelector(theSelector,guard);java代码中的这一行抛出错误

堆栈跟踪

18:17:11,189 ERROR [stderr] (MSC service thread 1-2) java.lang.IllegalArgumentException: Attempted to reset the LoggerFactory without possessing the guard.
18:17:11,190 ERROR [stderr] (MSC service thread 1-2)   at org.apache.log4j.LogManager.setRepositorySelector(LogManager.java:164)
18:17:11,191 ERROR [stderr] (MSC service thread 1-2)   at com.mportal.logger.api.AppRepositorySelector.init(AppRepositorySelector.java:73)
18:17:11,192 ERROR [stderr] (MSC service thread 1-2)   at com.mportal.logger.api.MPLoggerImpl.loadLogInstance(MPLoggerImpl.java:64)
18:17:11,192 ERROR [stderr] (MSC service thread 1-2)   at com.mportal.logger.api.MPLoggerImpl.<init>(MPLoggerImpl.java:38)
18:17:11,192 ERROR [stderr] (MSC service thread 1-2)   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
18:17:11,193 ERROR [stderr] (MSC service thread 1-2)   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
18:17:11,194 ERROR [stderr] (MSC service thread 1-2)   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
18:17:11,194 ERROR [stderr] (MSC service thread 1-2)   at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

如何解决这个问题?请给出解决方案。

【问题讨论】:

标签: java spring log4j jboss7.x


【解决方案1】:
LogManager.setRepositorySelector(theSelector, guard);

你只能使用一个守卫,使用不同的守卫对象会导致观察者错误:

java.lang.IllegalArgumentException: Attempted to reset the LoggerFactory without possessing the guard.

应该可以将null 作为参数传递给函数。或者简单地持有对初始设置守卫的引用。

文档说明:

最初的守卫是空的。如果守卫为空,则调用此方法会设置记录器工厂和守卫。后续调用将抛出 IllegalArgumentException,除非先前设置的保护作为第二个参数传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多