実行時に同じappenderの新しいファイルにlog4jファイルアペンダの古いファイルの内容を取得する方法は?

実行時にlog4jのファイルアペンダファイル名を変更します。

今度は、前のファイルの内容をappenderの新しいファイルに保存します。

誰かが私にこのことを教えることができますか?

最初はlog4j.propertiesを次のようにしています。

#log4j.appender.H.File='/home/g/connector/logs/'Y'_H.log'
#log4j.appender.H.File=/home/g/connector/logs/H.log
log4j.appender.H.File=/home/g/${logNameSuffix}.log

私のプログラムでは、私は当初、

    Date date = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd.HH:mm:ss");
    formattedDate = "jam" + formatter.format(date) + "_" + port;
    System.setProperty("logNameSuffix", formattedDate);
    PropertyConfigurator.configure(otherArgs[1]);

その後、次のように再ロードします。

    String logName = formattedDate;

    System.clearProperty("logNameSuffix");
    System.setProperty("logNameSuffix", logName);

    LogManager.resetConfiguration();

私が望むのは、作成された新しいログは、古いログの内容もそこに入れなければならないということです。

log4jで可能ですか?

ありがとう、 JJ

0
これはプログラムの呼び出し時であるため、私はログファイル名を持っていません。しかし、私はその名前でログを作成し、この新しいログファイル内の以前のすべての内容を取得したときに、いつかexectuonでファイル名を取得します。
追加された 著者 user656189,
どうして?そのようなものは、タイムスタンプ付きのファイル名を作成するという目的を破るものであり、コマンドラインでのファイル連結を処理するのと同じくらい簡単です。
追加された 著者 Dave Newton,

1 答え

私はあなたが手動で行うべきだと思います:古いファイルの名前を変更してプロパティをリセットする:

copyFile(new File("old file"), new File("new file"));

See copyFile

また、システムのプロパティを避けることができますし、プロパティファイルを再読み込みしないでください:

((FileAppender) LogManager.getRootLogger().getAppender("File")).setFile("new file");
0
追加された