2014-01-15 114 views
4

我創建了一個Java應用程序並使用該應用程序初始化一個java.util.Logger,並使用jboss AS 7服務器運行該應用程序爲-javaagent,並且我得到了IllegalStateException(我正在使用Eclipse IDE中)。在這裏我如下記錄的初始化代碼使用java.util.Logger的JBOSS AS 7.1中的LogManager異常

 

static public void setup() throws IOException { 

     // Get the global logger to configure it 
     Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); 

     logger.setLevel(Level.INFO); 
     fileTxt = new FileHandler("C:/Users/abc/Desktop/ATAGENT/Logging.txt"); 
     fileHTML = new FileHandler("C:/Users/abc/Desktop/ATAGENT/Logging.html"); 

     // create txt Formatter 
     formatterTxt = new SimpleFormatter(); 
     fileTxt.setFormatter(formatterTxt); 
     logger.addHandler(fileTxt); 

     // create HTML Formatter 
     formatterHTML = new BMITHtmlFormatter(); 
     fileHTML.setFormatter(formatterHTML); 
     logger.addHandler(fileHTML); 
     } 
 

當我創建-javaagent罐子附有代碼上面的線條和與JBoss AS7服務器我得到下面的異常

 

WARNING: Failed to load the specified log manager class org.jboss.logmanager.LogManager 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at org.jboss.as.server.Main.main(Main.java:73) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jboss.modules.Module.run(Module.java:260) 
    at org.jboss.modules.Main.main(Main.java:291) 
Caused by: java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager") 
    at org.jboss.logmanager.Logger.getLogger(Logger.java:60) 
    at org.jboss.logmanager.log4j.BridgeRepositorySelector.(BridgeRepositorySelector.java:42) 
    ... 7 more 
 

而且我本身運行在4ms內完成,我得到了一個solution,這是打開服務器定義的啓動配置。 並將-logmodule org.jboss.logmanager添加到org.jboss.as.standalone之前的程序參數。 但它導致同樣的異常,並帶有一些額外的警告。這裏有例外

 

WARNING: -logmodule is deprecated. Please use the system property 'java.util.logging.manager' or the 'java.util.logging.LogManager' service loader. 
WARNING: Failed to load the specified log manager class org.jboss.logmanager.LogManager 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at org.jboss.as.server.Main.main(Main.java:73) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jboss.modules.Module.run(Module.java:260) 
    at org.jboss.modules.Main.main(Main.java:291) 
Caused by: java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager") 
    at org.jboss.logmanager.Logger.getLogger(Logger.java:60) 
    at org.jboss.logmanager.log4j.BridgeRepositorySelector.(BridgeRepositorySelector.java:42) 
    ... 7 more 
 

回答

14

我和JBOSS EAP 6有同樣的問題,需要2天的時間才能找到解決方案!

原因是您的代理需要在statup上創建一個記錄器,他需要能夠在JBOSS模塊初始化之前訪問logmanager類。您需要將JBoss LogManager添加到引導類加載器。然後,通過ModuleClassLoader提供的LogManager和通過系統類加載器加載的類之間會有衝突。

解決方案是讓Java代理和JBoss模塊使用相同的類加載器加載LogManager類。

對於EAP 6,在你standalone.conf(或域)(它必須是接近你的版本)

添加

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager" 
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$JBOSS_HOME/modules/org/jboss/logmanager/main/jboss-logmanager-1.3.1.jar" 

和使Java代理和JBoss模塊使用相同的類加載器

修改這段代碼中添加org.jboss.logmanager這樣的:

if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then 
    JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,org.jboss.logmanager" 
fi 

希望這會有所幫助。

+0

感謝您的信息 –

+0

謝謝,工作正常! –

+0

在Windows中,語法不同:例如設置「JAVA_OPTS =%JAVA_OPTS%-Djboss.modules.system.pkgs = org.jboss.byteman,org.jboss.logmanager」並設置「JAVA_OPTS =%JAVA_OPTS%-Xbootclasspath/p:%JBOSS_HOME%\ modules \ org \ jboss \ logmanager \ main \ jboss-logmanager-1.3.2.Final.jar –

6

我在下面的鏈接中搜索了幾天後找到了解決方案。 https://github.com/jbossas/jboss-as-maven-plugin/issues/40#issuecomment-14943429

我必須稍微調整一下才能獲得工作Windows 7

  1. 打開Eclipse。
  2. 添加Jboss 7.1 Runtime 1服務器。
  3. 選擇服務器並按F3。
  4. 點擊Open Launch Config。
  5. 轉到VM參數。
  6. 添加以下兩項。

「-Djboss.modules.system.pkgs = org.jboss.byteman,org.jboss.logmanager」 「-Djava.util.logging.manager = org.jboss.logmanager。日誌管理」

現在選擇Classpath選項卡

  1. 選擇用戶條目
  2. 單擊Add External JARs
  3. 選擇三個jar文件

一)的jboss-日誌管理-1.2.0.GA.jar b)的jboss-日誌管理-的log4j-1.0.0.GA.jar c)中的log4j-1.2.16.jar

路徑

  1. C:/jboss-as-7.1.1。 Final/modules/org/jboss/logmanager/main/jboss-logmanager-1.2.0.GA.jar「
  2. C:/jboss-as-7.1.1.Final/modules/org/jboss/logmanager/log4j/ main/jboss-logmanager-log4j-1.0.0.GA.jar「
  3. C:/jboss-as-7.1.1.Final/modules/org/apache/log4j/main/log4j-1.2.16.jar」

這將啓動獨立的jboss,沒有任何問題。

+0

此解決方案適用於我,謝謝! – grajsek

0

在EAP 6.4,正確的日誌管理的路徑應 $ JBOSS_HOME /模塊/系統/層/基層/組織/ JBoss的/日誌管理/主/ JBoss的-日誌管理-1.5.4.Final-紅帽-1.jar