Исключение LogManager в JBOSS AS 7.1 с java.util.Logger

Я создал приложение Java и инициализирую java.util.Logger с этим приложением и запускаю это приложение как -javaagent с сервером Jboss AS 7, и я получил 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

И я подключился в Fourms, и я получил решение, которое является Открыть конфигурацию запуска для определения сервера. и добавить -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

3 ответа

Решение

У меня была та же проблема с JBOSS EAP 6, мне потребовалось 2 дня, чтобы найти решение!

Причина в том, что вашему агенту нужно создать Logger при установке, он должен иметь доступ к классам logmanager до инициализации модулей JBOSS. Вам нужно добавить JBoss LogManager в загрузчик классов загрузчика. Затем будет конфликт между LogManager, доступным через ModuleClassLoader, и классами, загруженными через системный загрузчик классов.

Решение состоит в том, чтобы заставить 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 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

Надеюсь, это поможет.

Я нашел решение после поиска в течение нескольких дней в ссылке ниже. https://github.com/jbossas/jboss-as-maven-plugin/issues/40

Мне нужно немного подправить, чтобы получить работу в Windows 7.

  1. Откройте Затмение.
  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

  1. Выберите записи пользователя
  2. Нажмите Добавить внешние банки
  3. Выберите три файла фляги

a) jboss-logmanager-1.2.0.GA.jarb) jboss-logmanager-log4j-1.0.0.GA.jarc) 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 без каких-либо проблем.

В EAP 6.4 правильный путь менеджера журналов должен быть $JBOSS_HOME/modules/system/layer /base/org/jboss/logmanager/main/jboss-logmanager-1.5.4.Final-redhat-1.jar

Другие вопросы по тегам