2012-12-14 122 views
0

java代码log4j配置

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,后卫);这条线在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) 

如何解决这个问题呢?请给解答。

+1

1)正确设置代码的格式2)解释发生这种错误的上下文3)只是倾销堆栈跟踪而无需解释将无法为任何人提供帮助 –

+0

请参阅http://stackoverflow.com/ questions/9584787/using-log4j-with-jboss-7-1您可能必须从JBoss中排除log4j依赖 –

回答

1
LogManager.setRepositorySelector(theSelector, guard); 

您只能使用一个后卫,用不同的保护的对象将导致错误observerd:

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

应该可以通过null作为参数传递给函数。或者干脆参照最初的集合后卫。

的文档状态:

Initally保护为空。如果守卫为空,则调用此方法设置记录器工厂和守卫。以下调用将抛出IllegalArgumentException,除非先前设置的警戒作为第二个参数传递。