2

ロギングにlog4jを使用しています。コマンドプロンプトでユーザーが入力したパスにログファイルを作成する必要があるという要件があります。ログ ファイルのパスを動的に変更することは可能ですか。また、ファイル名に現在のタイム スタンプを含む別のログ ファイルを作成する必要があります。これは可能ですか。

4

1 に答える 1

1

ユーザー入力に応じてファイルパスを設定するには:

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.log4j.FileAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

public class DemoClass {

  public static void main(String[] args) {
    Logger logger = Logger.getLogger("main");
    FileAppender fileAppender = new FileAppender();
    fileAppender.setLayout(new PatternLayout("%-5p [%t]: %m%n"));
    logger.addAppender(fileAppender);
    String userLogFileName = "";
    BufferedReader  reader = new BufferedReader(new InputStreamReader(System.in));
    try {
      userLogFileName = reader.readLine();//read the users input
    } catch (IOException e) {
      System.out.println("error on reading user input");
      e.printStackTrace();
    }
    File file = new File(userLogFileName);
    try {
      if(!file.exists()) {//if the file does not exist
        file.createNewFile();//create a new file
      }
    } catch (IOException e) {
      System.out.println("error on creating file");
      e.printStackTrace();
    }
    fileAppender.setFile(userLogFileName);//the file must exist
    fileAppender.activateOptions();//activate the new file
    logger.error("test");
  }

}

2 番目の質問: イベントをログに記録するたびにファイル名を更新する必要がありますか? これは悪いパフォーマンスのように聞こえます。a を使用しDailyRollingFileAppenderて、選択したタイムステップで新しいログファイルを取得し、最後のイベントのタイムスタンプをファイル名に入れます (デフォルト)。

于 2012-08-22T08:41:07.980 に答える