5

log4j2.xmlの自動構成を正しく適用するのに問題があり、フォルダーの配置と関係があると思います。
私はmavenを使用してlog4j2ライブラリを追加し、プロジェクトを次のように配置しています。-
システムのサーバー側とクライアント側で使用されるすべての「共通」クラスを含む1つのプロジェクト。
-別の「コア」プロジェクト-サーバー側アプリケーション。
両方のプロジェクトは、同じ一般的なパッケージ階層(com.foo.specific.packageなど)を使用します

Common Projectでは、ロガーラッパーを定義します。

public class LogWrapper
{
    static Logger systemParentLogger = LogManager.getLogger("com.foo");

    public static Logger getLogger(Class<?> cls)
    {
        return LogManager.getLogger(cls.getName());
    }
}

さらに、Commonプロジェクトには、META-INFの下にlog4j2.xmlファイルが含まれています(Hibernateで使用するためのpersistence.xmlファイルと一緒に)。

<?xml version="1.0" encoding="UTF-8"?>
<configuration name="PRODUCTION" status="OFF">

    <appenders>
        <appender type="RollingFile" 
            name="MyFileAppender" 
            fileName="logs/app.log" 
            filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n"/>
        </appender>
    </appenders>

    <loggers>
        <root level="error">
            <appender-ref ref="MyFileAppender"/>
        </root>

        <logger name="com.foo" level="info" additivity="false">
            <appender-ref ref="MyFileAppender"/>
        </logger>

        <logger name="org.hibernate" level="error">
            <appender-ref ref=MyFileAppender"/>
        </logger>
    </loggers>

</configuration>

Coreプロジェクトでサンプルコードを実行している間(私が作成したLogWrapperといくつかのJPAブードゥーを使用)、INFO休止状態ログを表示でき、ログファイルは作成されませんでした。コードのデバッグ中に、フェッチされたロガーに奇妙な値「com.foo.core.persistence.PersistenceXMLTest:ERRORinsun.misc.Launcher$AppClassLoader@2f600492」が指定されていることがわかりました。

4

1 に答える 1

1

log4j2.xmlは、日食用語では「クラスパス上にない」「フォルダー」に配置されましたMETA-INF「ソースフォルダ」
に 変更すると、問題が解決しました。 さらに、log4j2.xmlファイルが正しく定義されていませんでした。必要な変更は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<configuration name="PRODUCTION" status="OFF">

<appenders>
    <RollingFile name="MyFileAppender" 
        fileName="../Logs/app.log" 
        filePattern="../Logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout>
            <pattern>%d %p %C{1.} [%t] %m%n</pattern>
        </PatternLayout>
        <Policies>
            <OnStartupTriggeringPolicy />
            <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingFile>
</appenders>

<loggers>
    <root level="error">
        <appender-ref ref="MyFileAppender"/>
    </root>

    <logger name="com.foo" level="info" additivity="false">
        <appender-ref ref="MyFileAppender"/>
    </logger>
</loggers>

</configuration>

それでもorg.hibernateロガーをログにリダイレクトさせることはできませんでしたが、少なくともロガーを機能させることができました

于 2013-02-02T09:46:07.023 に答える