任意のファイルやクラスから例外をログに記録できるように、シングルトン ロガー クラス用に以下のラッパーを作成しました。私のインスピレーションはここから来ています:複数の Java ファイルから 1 つのファイルにログを記録する
私はJavaが初めてで、例外をファイルに記録しようとするのはこれが初めてです。次のコードは機能しますが、「通常の動作」であるかどうか、または回避策が存在するかどうかを確認したいいくつかの癖に気付きました。
(1) ログ ファイルが作成され、例外を除いて書き込まれると、ログ ファイルを編集すると (たとえば、テキストの一部の行を削除するなど)、ログ ファイルはその時点から二度と書き込まれません。ログ ファイルが再度書き込まれる前に、Web サーバーは Web アプリケーションに関連付けられたドメインを再起動する必要があります。これは正常ですか?理想的には、Web サーバーで Web アプリケーションのドメインを再起動する必要なく、関連するエラーのみをログ ファイルに保持し、無関係なエラーを削除したいと考えています。
(2) ログ ファイルを削除すると、後で Java プログラムで例外が発生し、ログ ファイルが再度作成されず、例外が失われます。ここでも、Web サーバーは、新しいログ ファイルを作成する前に、Web アプリケーションに関連付けられたドメインを再起動する必要があります。これは正常ですか、それとも以下のコードを編集することで何らかの回避策がありますか? 理想的には、いつでもログ ファイルを削除して、アプリケーションで新しいログ ファイルを作成できるようにしたいと考えています。
繰り返しますが、私はここに来たばかりなので、上記の意図が悪いデザインなどであることを指摘してください.
------コードは続きます------
ファイルは次のとおりです: LoggerWrapper.java
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;
public class LoggerWrapper {
public static final Logger myLogger = Logger.getLogger("Test");
private static LoggerWrapper instance = null;
public static LoggerWrapper getInstance() {
if(instance == null) {
prepareLogger();
instance = new LoggerWrapper ();
}
return instance;
}
private static void prepareLogger() {
try {
FileHandler myFileHandler = new FileHandler("/path/to/myLogFile.log", true);
myFileHandler.setFormatter(new SimpleFormatter());
myLogger.addHandler(myFileHandler);
myLogger.setUseParentHandlers(false);
myLogger.setLevel(Level.ALL);
} catch (Exception e) {
...
}
}
}
上記のコードを別のファイルまたはクラスで呼び出すには、次の行を発行します (例):
LoggerWrapper loggerWrapper = LoggerWrapper.getInstance();
...
loggerWrapper.myLogger.log(Level.SEVERE, "some text here"+e.fillInStackTrace());