gpt4 book ai didi

java - 多个记录器可以使用相同的处理程序吗?

转载 作者:行者123 更新时间:2023-11-30 10:25:58 26 4
gpt4 key购买 nike

在多个记录器中使用相同的文件处理程序是个好主意吗?我使用 Java 日志记录框架,我希望不同的记录器写入同一个日志文件,但我不知道下面的代码示例是否是一种好的编程风格。

import java.io.*;
import java.util.logging.*;

public class Alpha {
private static final Logger LOGGER = Logger.getLogger(Alpha.class.getName());
private static FileHandler loggingHandler;

static {
try {
loggingHandler = new FileHandler("logfile.log", true);
LOGGER.addHandler(loggingHandler);
} catch (IOException e) {
e.printStackTrace();
}
}

public static FileHandler getLoggingHandler() {
return loggingHandler;
}
}

class Beta {
private static final Logger LOGGER = Logger.getLogger(Beta.class.getName());

static {
LOGGER.addHandler(Alpha.getLoggingHandler());
}
}

最佳答案

答案是肯定的。您可以通过制作一个 singleton 来实现(例如) log 类,以便任何其他类或线程尝试创建它的副本,实际上将使用相同的实例。

使用 java.util.logging 的示例实现:

public class LogMe {        
private static LogMe logMe;
private static Logger logger;
private static FileHandler fh;
private static Formatter sf;

public LogMe() {
//Make this class a singleton
if (logMe != null) {
return;
}

//Create the log file
try {
fh = new FileHandler("../xyz/LogFile.log");
} catch (Exception e) {
e.printStackTrace();
}

sf = new SimpleFormatter();
fh.setFormatter(sf);
logger.addHandler(fh);

//Part of making this class a singleton
logger = Logger.getLogger("LogMe");
logMe = this;
}

public Logger getLogger() {
return LogMe.logger;
}
}

然后在您的类(class)中您将像这样使用它:

 class MyClass1 {
LogMe logMe1 = new LogMe();
Logger logger2 = logMe1.getLogger();
logger.info("X 01");
}

关于java - 多个记录器可以使用相同的处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45887373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com