gpt4 book ai didi

通过多个类进行 Java 日志记录

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:36 24 4
gpt4 key购买 nike

我想登录包含多个类的应用程序。我想在最后有一个 .txt 日志文件。因此,我制作了一个静态记录器实例,并在一个类中为它制作了一个 FileHandler。因为我想要一个文件,所以我在 FileHandler 中将第二个参数设置为 true 以便能够在记录期间附加日志文件。

public class MyLogging {
static Logger logger;
public Handler fileHandler;
Formatter plainText;

public MyLogging() throws IOException{
//instance the logger
logger = Logger.getLogger(MyLogging.class.getName());
//instance the filehandler
fileHandler = new FileHandler("myLog.txt",true);
//instance formatter, set formatting, and handler
plainText = new SimpleFormatter();
fileHandler.setFormatter(plainText);
logger.addHandler(fileHandler);

}

之后,我创建了其他记录器。我知道我必须在每个类(class)实例化一个记录器。因此,我只为每个类制作记录器(不带 FileHandler)。但是所有记录器都引用一个类(不是我创建记录器的类)。例如:

public class Test1 {
static Logger logger;

public Test1()throws IOException {

logger = Logger.getLogger(MyLogging.class.getName());
}

虽然执行了日志记录,但我不确定这是正确的解决方案。你能给我一些关于如何使用 java.util.logging 通过多个类进行日志记录的建议吗?

最佳答案

在 MyLogging 类中,将构造函数设置为 private 而不是 public ,您需要以下方法:

private static Logger getLogger(){
if(logger == null){
try {
new MyLogging();
} catch (IOException e) {
e.printStackTrace();
}
}
return logger;
}
public static void log(Level level, String msg){
getLogger().log(level, msg);
System.out.println(msg);
}

log 方法是静态的,因此可以使用类名从任何类调用它。

所以从你所有的类中,你可以记录如下调用日志方法:

public class Test1 {
//static Logger logger; //no need to create an object for logging

public Test1()throws IOException {

MyLogging.log(Level.INFO, MyLogging.class.getName()); //call log method using classname
}

关于通过多个类进行 Java 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20737880/

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