3

私の Google foo は今日私を失望させます! JMX 経由でロガーにアクセスし、ログ レベルを変更できるように、log4j2 を構成しようとしています。

ただし、log4j2 JMX docsに示されているように、すべてを接続すると、JMX ツリー (または log4j-jmx-gui) にロガーが表示されません。JConsole 属性ツリーの log4j2 ContextSelector と StatusLogger、および log4j-jmx-gui (スタンドアロンまたはプラグインとして) の StatusLogger タブのみが表示されます。LoggerContext 要素はありません。

私はグーグルで検索しましたが、何も思いつきませんでした!それはおそらく、どこかで何かが欠けていることを意味します。私と私が頭をぶつけている壁にどんな助けでも大歓迎です:)

win7でJava 1.6.0_45-b06でLog4j2 beta9を使用しています。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

log4j-jmx-gui の [StatusLogger] タブには 1 つの例外がありますが、ロガーとは関係ないようです。

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
4

2 に答える 2

1

あなたの設定は良さそうですが、少し疑わしいのはエラーだけです。エラーは LoggerContext コンストラクターで発生しているように見えるので、やはり関連している可能性があります。

バグが見つかった可能性があります。log4j チームが確認できるように、この問題を log4j2 イシュー トラッカーに報告していただけませんか?

于 2013-11-06T22:22:53.140 に答える
1

Log4j2 はデフォルトでClassLoaderContextSelectorasを使用ContextSelectorします。場合によっては (私には明確ではありませんが、あなたのような単純なアプリケーションの場合もあります)、getLoggerContexts()メソッド呼び出しの結果として何も返されません。ロガー コンテキストなし - 何も表示されないため、LoggerContextカテゴリはツリーに表示されません。ContextSelector別の実装を選択することで修正できます。org.apache.logging.log4j.core.selector.BasicContextSelectorこの目的で使用しました。「Log4jContextSelector」という名前のシステム プロパティを使用して設定できます。詳細については、ドキュメントを参照してください。

それは私の問題を解決します。あなたの問題も解決するのに役立つことを願っています。

于 2013-12-03T03:11:16.370 に答える