【问题标题】:LogManager Exception in JBOSS AS 7.1 with java.util.LoggerJBOSS AS 7.1 中的 LogManager 异常与 java.util.Logger
【发布时间】:2014-01-15 10:02:50
【问题描述】:

我创建了一个 java 应用程序并使用该应用程序初始化一个 java.util.Logger 并使用 jboss AS 7 服务器将该应用程序作为-javaagent 运行,我得到了IllegalStateException(我正在使用 eclipse IDE)。下面是我的记录器初始化代码

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 jar 附加上面的代码行并使用 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

然后我搜索了四个,我得到了一个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

【问题讨论】:

    标签: eclipse logging jboss7.x java.util.logging javaagents


    【解决方案1】:

    我在使用 JBOSS EAP 6 时遇到了同样的问题,我花了 2 天时间才找到解决方案!

    原因是您的代理需要在启动时创建一个 Logger,他需要能够在 JBOSS 模块初始化之前访问 logmanager 类。您需要将 JBoss LogManager 添加到引导类加载器。这样一来,ModuleClassLoader 可用的 LogManager 和系统 classloader 加载的类就会发生冲突。

    解决方案是让 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"
    

    为了使 Java 代理和 JBoss 模块使用相同的类加载器

    像这样在添加 org.jboss.logmanager 中修改这段代码:

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

    希望这会有所帮助。

    【讨论】:

    • 在 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.4,正确的路径是 $JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-1.5.4.Final-redhat-1.jar
    • 另一个重要的一点是你必须设置准确的整个路径,当我在jar名称中使用*时,它没有找到jar。
    【解决方案2】:

    我在下面的链接中搜索了几天后找到了解决方案。 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. 点击打开启动配置。
    5. 转到 VM 参数。
    6. 添加以下两个条目。

    "-Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager" "-Djava.util.logging.manager=org.jboss.logmanager.LogManager"

    现在选择类路径选项卡

    1. 选择用户条目
    2. 点击添加外部罐子
    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。

    【讨论】:

      【解决方案3】:

      在 EAP 6.4 中,正确的 logmanager 路径应该是 $JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-1.5.4.Final-redhat-1.jar

      【讨论】:

        猜你喜欢
        • 2015-09-11
        • 2021-02-22
        • 2013-05-11
        • 1970-01-01
        • 2012-05-20
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        相关资源
        最近更新 更多