为了更好地理解调试记录器是如何工作的,我尝试用java实现我自己的记录器。如下面的代码所示。据我了解,记录器通常是单例。我想在应用程序的不同类中使用相同的实例。我使用此记录器的每个类都会记录到不同的文件。但这意味着单例正在被不同的对象变异。这是否会导致将一个类的调试输出不准确地记录到应由另一类记录的文件中。由于同一记录器实例在整个应用程序中共享,那么如何生成不同的文件?它是应用程序中发生变异的同一个实例。因此,我决定将 logFile 位置设置为最终位置,但所有类都会记录到同一个文件。您能解释一下这些好奇心吗?
提前谢谢您。
public class Logger {
private final String logFile;
private static Logger instance;
private Logger(String logFile){
this.logFile = logFile;
}
public Logger getInstance(String logFile){
synchronized(Logger.class){
if(instance==null){
instance = new Logger(logFile);
}
}
return instance;
}
public void write(String data) throws IOException{
PrintWriter out = new PrintWriter (new BufferedWriter(new FileWriter(logFile)));
out.write(data);
}
}
最佳答案
如果你想了解记录器的实现,你可以阅读log4j的源代码。但在 log4j 中,记录器不是单例的,有多个实例,它使用存储库和工厂模式。
关于java - 记录器究竟如何是单例以及如何创建不同的日志文件?实现了我自己的记录器以供理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26949503/