带有java.util.Logger的JBOSS AS 7.1中的LogManager异常

Ani*_*ony 5 eclipse logging javaagents java.util.logging jboss7.x

我创建了一个java应用程序并使用该应用程序初始化java.util.Logger并运行该应用程序,就像-javaagent使用jboss AS 7服务器一样IllegalStateException(我使用的是eclipse IDE).这是我的logger初始化代码


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);
      }

当我创建-javaagentjar附加上面的代码行并使用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

我在四分钟内完成了一个解决方案,即开放服务器定义的启动配置.并添加-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

小智 19

我遇到了与JBOSS EAP 6相同的问题,我需要2天才能找到解决方案!

原因是您的代理需要在statup创建一个Logger,他需要能够在JBOSS模块初始化之前访问logmanager类.您需要将JBoss LogManager添加到引导类加载器.然后,通过ModuleClassLoader提供的LogManager与通过系统类加载器加载的类之间将发生冲突.

解决方案是使Java Agent和JBoss Modules使用相同的类加载器来加载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"
Run Code Online (Sandbox Code Playgroud)

并且对于make Java Agent和JBoss Modules使用相同的类加载器

在添加org.jboss.logmanager中修改这段代码,如下所示:

if [ "x$JBOSS_MODULES_SYSTEM_PKGS" = "x" ]; then
    JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,org.jboss.logmanager"
fi
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助.

  • 在 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 (2认同)

cye*_*uri 8

我在以下链接中搜索了几天后找到了解决方案. 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.LogManager"

现在选择Classpath TAB

  1. 选择用户条目
  2. 单击"添加外部JAR"
  3. 选择三个jar文件

a) jboss-logmanager-1.2.0.GA.jar b) jboss-logmanager-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而不会出现任何问题.