2013-11-06 3 views
2

Мой Google foo подводит меня сегодня! Я пытаюсь настроить log4j2, чтобы я мог обращаться к регистраторам через JMX и изменять их уровни журналов.log4j2 LoggerContext не отображается в JMX Gui или JConsole

Однако, когда я подключаю все, ни один из регистраторов не появляется в дереве JMX (или log4j-jmx-gui), как показано на рисунке log4j2 JMX docs. Отображаются только log4j2 ContextSelector и StatusLogger в дереве атрибутов JConsole и вкладке StatusLogger в log4j-jmx-gui (автономный или как плагин). Нет элементов LoggerContext.

Я искал googled и ничего не придумывал! Вероятно, это означает, что я что-то упускаю. Любая помощь будет очень благодарна мне и стене, на которую я стучаю головой :)

Я использую Log4j2 beta9 с Java 1.6.0_45-b06 на win7. Я пробовал это на Java 7, и это приводит к такому же поведению.

Зависимости log4j2 используются:

log4j-api-2.0-beta9.jar 
log4j-core-2.0-beta9.jar 

Мой log4j2.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<Configuration status="debug"> 
    <Appenders> 
     <Console name="log-test" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{DATE} %-5p LJX2 %c{1}: %m%n" /> 
     </Console> 
    </Appenders> 
    <Loggers> 
     <Logger name="top.Log4J2TestApp" level="debug" additivity="false"> 
      <AppenderRef ref="log-test" /> 
     </Logger> 
     <Root level="trace"> 
      <AppenderRef ref="log-test" /> 
     </Root> 
    </Loggers> 
</Configuration> 

Моя тестовая программа:

package top; 
import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

public class Log4J2TestApp { 
    public static void main(String[] args) { 
     System.out.println("******** Started ZZZ ****************"); 
     Logger log = LogManager.getLogger(Log4J2TestApp.class); 
     int cnt = 0; 
     while (true) { 
      log.warn("=========== Test message: {} ================", cnt++); 
      Thread.sleep(1000); 
     } 
    } 
} 

Выход тестовой программы выглядит следующим образом:

******** Started ZZZ **************** 
2013-11-06 15:07:29,720 DEBUG Generated plugins in 0.000020959 seconds 
2013-11-06 15:07:29,733 DEBUG Calling createLayout on class org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout with params(pattern="%d{DATE} %-5p LJX2 %c{1}: %m%n", Configuration(log4j2.xml), null, charset="null",alwaysWriteExceptions="null") 
2013-11-06 15:07:29,735 DEBUG Generated plugins in 0.000013687 seconds 
2013-11-06 15:07:29,737 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console with params(PatternLayout(%d{DATE} %-5p LJX2 %c{1}: %m%n), null, target="SYSTEM_OUT", name="log-test",follow="null", ignoreExceptions="null") 
2013-11-06 15:07:29,739 DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream2013-11-06 15:07:29,740 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.plugins.AppendersPlugin for element Appenders with params(Appenders={log-test}) 
2013-11-06 15:07:29,742 DEBUG Generated plugins in 0.000012832 seconds 
2013-11-06 15:07:29,743 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element AppenderRef with params(ref="log-test", level="null", null) 
2013-11-06 15:07:29,746 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element Logger with params(additivity="false", level="debug", name="top.Log4J2TestApp", includeLocation="null", AppenderRef={log-test}, Properties={}, Configuration(log4j2.xml), null) 
2013-11-06 15:07:29,749 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element AppenderRef with params(ref="log-test", level="null", null) 
2013-11-06 15:07:29,751 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element Root with params(additivity="null", level="trace", includeLocation="null", AppenderRef={log-test}, Properties={}, Configuration(log4j2.xml), null) 
2013-11-06 15:07:29,754 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.plugins.LoggersPluginfor element Loggers with params(Loggers={top.Log4J2TestApp, root}) 
2013-11-06 15:07:29,755 DEBUG Reconfiguration completed 
06 Nov 2013 15:07:29,763 WARN LJX2 Log4J2TestApp: =========== Test message: 0 ================ 
.... 
06 Nov 2013 15:07:36,766 WARN LJX2 Log4J2TestApp: =========== Test message: 7 ================ 

2013-11-06 15:07:51,450 DEBUG ServletContext not present - WebLookup not added 
2013-11-06 15:07:51,451 DEBUG Shutting down OutputStreamManager SYSTEM_OUT 

Вкладка StatusLogger в log4j-jmx-gui имеет одно исключение, но, похоже, это не имеет ничего общего с регистраторами.

2013-11-06 15:41:01,403 WARN Multiple logging implementations found: 
Factory: org.apache.logging.log4j.core.impl.Log4jContextFactory, Weighting: 10 
Using factory: org.apache.logging.log4j.core.impl.Log4jContextFactory 
2013-11-06 15:41:01,505 WARN JmDNS or serviceInfo class not found java.lang.ClassNotFoundException: javax.jmdns.JmDNS 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:171) 
    at org.apache.logging.log4j.core.net.MulticastDNSAdvertiser.initializeJMDNS(MulticastDNSAdvertiser.java:228) 
    at org.apache.logging.log4j.core.net.MulticastDNSAdvertiser.<clinit>(MulticastDNSAdvertiser.java:41) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:171) 
    at org.apache.logging.log4j.core.config.plugins.PluginManager.decode(PluginManager.java:241) 
    at org.apache.logging.log4j.core.config.plugins.PluginManager.collectPlugins(PluginManager.java:152) 
    at org.apache.logging.log4j.core.config.plugins.PluginManager.collectPlugins(PluginManager.java:130) 
    at org.apache.logging.log4j.core.pattern.PatternParser.<init>(PatternParser.java:116) 
    at org.apache.logging.log4j.core.pattern.PatternParser.<init>(PatternParser.java:102) 
    at org.apache.logging.log4j.core.layout.PatternLayout.createPatternParser(PatternLayout.java:183) 
    at org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:115) 
    at org.apache.logging.log4j.core.layout.PatternLayout.createLayout(PatternLayout.java:219) 
    at org.apache.logging.log4j.core.config.DefaultConfiguration.<init>(DefaultConfiguration.java:51) 
    at org.apache.logging.log4j.core.LoggerContext.<init>(LoggerContext.java:63) 
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:217) 
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:114) 
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:81) 
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:83) 
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:34) 
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:387) 
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:332) 
    at top.Log4J2TestApp.main(Log4J2TestApp.java:10) 
    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.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 

2013-11-06 15:41:01,612 DEBUG Generated plugins in 0.000017537 seconds 
2013-11-06 15:41:01,625 DEBUG Calling createLayout on class org.apache.logging.log4j.core.layout.PatternLayout for element PatternLayout with params(pattern="%d{DATE} %-5p LJX2 %c{1}: %m%n", Configuration(log4j2.xml), null, charset="null", alwaysWriteExceptions="null") 
2013-11-06 15:41:01,627 DEBUG Generated plugins in 0.000011977 seconds 
2013-11-06 15:41:01,629 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.ConsoleAppender for element Console with params(PatternLayout(%d{DATE} %-5p LJX2 %c{1}: %m%n), null, target="SYSTEM_OUT", name="log-test", follow="null", ignoreExceptions="null") 
2013-11-06 15:41:01,631 DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream 
2013-11-06 15:41:01,632 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.plugins.AppendersPlugin for element Appenders with params(Appenders={log-test}) 
2013-11-06 15:41:01,633 DEBUG Generated plugins in 0.000011977 seconds 
2013-11-06 15:41:01,635 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element AppenderRef with params(ref="log-test", level="null", null) 
2013-11-06 15:41:01,637 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element Logger with params(additivity="false", level="debug", name="top.Log4J2TestApp", includeLocation="null", AppenderRef={log-test}, Properties={}, Configuration(log4j2.xml), null) 
2013-11-06 15:41:01,640 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element AppenderRef with params(ref="log-test", level="null", null) 
2013-11-06 15:41:01,642 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element Root with params(additivity="null", level="trace", includeLocation="null", AppenderRef={log-test}, Properties={}, Configuration(log4j2.xml), null) 
2013-11-06 15:41:01,644 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.plugins.LoggersPlugin for element Loggers with params(Loggers={top.Log4J2TestApp, root}) 
2013-11-06 15:41:01,646 DEBUG Reconfiguration completed 

ответ

1

Ваша конфигурация выглядит хорошо, единственное, что немного подозрительно - это ошибка. Ошибка, похоже, возникает в конструкторе LoggerContext, поэтому она может быть связана в конце концов.

Возможно, вы обнаружили ошибку. Не могли бы вы сообщить об этой проблеме в трекер log4j2, чтобы команда log4j могла посмотреть на нее?

+0

привет Ремко, спасибо за быстрый ответ. Проблема поднята как [LOG4J2-443] (https://issues.apache.org/jira/browse/LOG4J2-443). –

1

Log4j2 использует ClassLoaderContextSelector как ContextSelector по умолчанию. В некоторых случаях (это не ясно для меня, может быть для простых приложений, таких как ваши), он ничего не возвращает как результат вызова метода getLoggerContexts(). Нет контекстов журналов - ничего не показывают, поэтому категория LoggerContext не присутствует в дереве. Его можно исправить, выбрав другую реализацию ContextSelector. Для этой цели я использовал org.apache.logging.log4j.core.selector.BasicContextSelector. Его можно установить с помощью системного свойства с именем «Log4jContextSelector». См. docs для получения дополнительной информации.

Он решает мою проблему, я надеюсь, что это поможет решить вашу проблему.

Смежные вопросы