4

(log4j バージョン 2 を使用している場合、これは適用されません)

デバッグを出力するように log4j を設定する方法と、デフォルトの Properties オブジェクトをプログラムで構築する方法を知っていること。

log4j がクラスパスで構成ファイルを見つけられなかったかどうかを検出するコードのヘルプが必要です。

これは、少なくともコンソールにすべてのログを表示するための log4j.xml がない場合に使用します。

私が持っているコード:

private static void log4Default() {
        boolean noLog = true;
  //how to set this to false if log4j did find a config file
//      File log4f = new File("log4j.xml");
//      File log4f2 = new File("log4j.properties");
//      
//      if(log4f.exists() || log4f2.exists()) {
//          noLog = false;
//      }else {
//          log4f = new File("target/classes/log4j.xml");
//          log4f2 = new File("target/classes/log4j.properties");
//          if(log4f.exists() || log4f2.exists()) {
//              noLog = false;
//          }
//      }
//      if(noLog) {
//          log4f = new File("target/test-classes/log4j.xml");
//          log4f2 = new File("target/test-classes/log4j.properties");
//          if(log4f.exists() || log4f2.exists()) {
//              noLog = false;
//          }
//      }

        if(noLog) {
            System.out.println("no log4j config, using default");
            Layout layout = new PatternLayout(" %-5p %t %d [%t][%F:%L] : %m%n");
            Appender ap = new ConsoleAppender(layout , ConsoleAppender.SYSTEM_OUT);
            Logger.getRootLogger().setLevel(Level.ALL);
            //Logger.getRootLogger().addAppender(new ConsoleAppender(layout, ConsoleAppender.SYSTEM_ERR));
            Logger.getRootLogger().addAppender(ap);
        }

    }

オーバーライドが存在する可能性があり、上記はファウルプルーフではないため、ファイルが存在することをコメントアウトしました。

4

1 に答える 1

7

log4j.xml/.propertiesこれを使用して、クラスパスにファイルが存在するかどうかを確認できます。

public void checkForLog4jConfigFile() {

org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger();
Enumeration appenders = rootLogger.getAllAppenders();
if (!appenders.hasMoreElements()) {
    System.out.println("LOG4J config file is missing");
} else {
    System.out.println("appender found "
    + ((Appender) appenders.nextElement()).getName());
}
}
于 2013-09-27T14:36:42.753 に答える