我为单例记录器类创建了以下包装器,以便我可以记录来自任何文件和/或类的异常。我的灵感来自这里:Logging to one file from multiple java files
我是 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());