1

作業ディレクトリの XML ファイルから構成を読み取るようにLog4j2を構成できません。

ドキュメントにあるように、システムプロパティを設定しようとしていました:

Log4j は「log4j.configurationFile」システム プロパティを検査し、設定されている場合は、ファイル拡張子に一致する ConfigurationFactory を使用して構成をロードしようとします。

メインクラスの静的初期化子ブロック、mainメソッド内、相対パスと絶対パスを使用:

  • System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "E:/log4j2.xml");

  • System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "./log4j2.xml");

  • System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "log4j2.xml");

また、"log4j.configurationFile"その代わりにXMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY何も機能しません。

この構成は、XML をsrcdirectoryに配置してクラスパスに追加した場合にのみ機能します。作業ディレクトリの XML ファイルを編集して、コンパイル後の lightweid 構成を許可したい。

使用される依存関係:

4

1 に答える 1

5

私にとってはうまくいきます。

public class Runtimeconfig {
    public static void main(String args[]) {
        System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "/home/peter/config/log4j2.xml");
        new LoggedClass().logMe();
    }
}


public class LoggedClass {
    static Logger logger = LogManager.getLogger(LoggedClass.class);

    public void logMe() {
        logger.info("I'm logged!");
    }
}

使うと壊れる

static Logger logger = LogManager.getLogger(Runtimeconfig.class);

静的フィールドが最初に初期化されるため、メインメソッドが配置されているクラスで。

機能するものは次のとおりです

public class Runtimeconfig {

    static {
        System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "/home/peter/config/log4j2.xml");
    }

    static Logger logger = LogManager.getLogger(Runtimeconfig.class);

    public static void main(String args[]) {

        new LoggedClass().logMe();
        new Runtimeconfig().logger.info("I'm logged too");
    }
}

ただし、静的フィールドの初期化実行の順序に依存します。

于 2013-10-20T12:53:37.543 に答える