9

特定のメソッド呼び出し MyMethod() のアペンダーを作成して有効にしたいと考えています。このメソッドのログ出力は、"logFilePath" に存在するファイルに送られるはずです。

このアペンダーをxml構成ファイルに含めたくないので、実行時に作成することを考えました。

まず、実行時にロガーのプロパティを変更してから、 activateOptions を呼び出してみました。前にレベルを DEBUG に設定し、finally ブロックでオフに設定して、メソッドが使用されている間だけ出力がログに記録されるようにします。それはうまくいきませんでした。

ここでの問題は、アペンダーが毎回ファイルを再作成し、同じファイルに追加しないことです。これは、setAppend が true であるにもかかわらずです。

私は log4j にあまり詳しくないので、別のアプローチを提案してください。以下は、私がしようとしていることを説明するためのサンプルコードです。

private static FileAppender createNewAppender(String logFilePath) {
    FileAppender appender = new FileAppender();
    appender.setName("MyFileAppender");
    appender.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
    appender.setFile(logFilePath);
    appender.setAppend(true);
    appender.setThreshold(Level.INFO);
    appender.activateOptions();
    Logger.getRootLogger().addAppender(appender);
    return appender;
}

private static void removeAppender() {
    Logger.getRootLogger().removeAppender(fileAppender) ; // ("MyFileAppender");
}

上記のメソッドを次の方法で呼び出します。

private static FileAppender fileAppender = null;

private static void myMethod(String logFilePath) {        
    try {
        fileAppender = createNewAppender();
        someOperation();
    }
    finally {
        removeAppender();
        fileAppender=null; 
    }
}
4

2 に答える 2

7

メソッドを作成してこれを追加するだけで非常に簡単です

String targetLog="where ever you want your log"

FileAppender apndr = new FileAppender(new PatternLayout("%d %-5p [%c{1}] %m%n"),targetLog,true);    
logger.addAppender(apndr);
logger.setLevel((Level) Level.ALL);

次に、ログに記録する必要がある任意の方法で、次のようにします: logger.error("your error here");

于 2012-08-02T13:43:13.327 に答える