5

-javaagent私はJavaアプリケーションを作成し、そのアプリケーションでjava.util.Loggerを初期化し、jboss AS 7サーバーとIllegalStateException同じようにそのアプリケーションを実行しました.


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

上記のコード行を追加してjarを作成-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

そして、私は四分の一で検索し、サーバー定義の起動構成を開くという解決策を得ました。-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

4

3 に答える 3

21

JBOSS EAP 6 でも同じ問題が発生しました。解決策を見つけるのに 2 日かかりました。

原因は、エージェントが起動時にロガーを作成する必要があるためです。エージェントは、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"

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

これが役立つことを願っています。

于 2014-03-04T10:02:51.530 に答える
9

以下のリンクで数日間検索した後、解決策を見つけました。 https://github.com/jbossas/jboss-as-maven-plugin/issues/40#issuecomment-14943429

Windows 7で動作するようにするには、少し調整する必要があります。

  1. エクリプスを開きます。
  2. Jboss 7.1 ランタイム 1 サーバーを追加します。
  3. サーバーを選択し、F3 を押します。
  4. [起動設定を開く] をクリックします。
  5. VM 引数に移動します。
  6. 以下の 2 つのエントリを追加します。

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

クラスパスタブを選択します

  1. ユーザーエントリの選択
  2. [外部 jar を追加] をクリックします。
  3. 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 が起動します。

于 2014-06-21T14:58:53.427 に答える
0

EAP 6.4 では、正しいログマネージャーのパスは $JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-1.5.4.Final-redhat-1.jar になります。

于 2015-10-26T22:03:22.867 に答える