gpt4 book ai didi

java - 获取 Formatter 的调用者类名 [使用文件处理程序进行 Java 日志记录]

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:35 25 4
gpt4 key购买 nike

我想向我的记录器添加一个 FileHandler。我还为我的 FileHandler 创建一个新的 Formatter(java.util.logging.Formatter)

格式方法中https://docs.oracle.com/javase/7/docs/api/java/util/logging/Formatter.html#format(java.util.logging.LogRecord) ,是否可以获取调用日志https://docs.oracle.com/javase/7/docs/api/java/util/logging/Logger.html#log(java.util.logging.Level,%20java.lang.String)method的类?

编辑:我将记录器包装在一个类中,因此 getSourceClassName() 将不起作用

最佳答案

...is it possible to get the class which called the log? Note that LogRecord.getSourceClassName() returns the Logger class.

LogRecord.getSourceClassName() 完全按照您想要的方式执行。这是一个例子:

import java.io.File;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

public class FileHandlerTest {

private static final Logger logger = Logger.getLogger("tester");

static {
try {
FileHandler h = new FileHandler();
logger.addHandler(h);
h.setFormatter(new TestFormatter());
} catch (IOException ex) {
throw new ExceptionInInitializerError(ex);
}
}

private static class TestFormatter extends Formatter {

@Override
public String format(LogRecord record) {
return record.getSourceClassName();
}

}

public static void main(String[] args) throws Exception {
System.out.println(new File(".").getCanonicalPath());
System.out.println(System.getProperty("user.home"));
logger.log(Level.INFO, "This not a test. This is the real thing!");
}
}

当我在我的机器上运行它时,它会在我的用户主目录中创建一个名为 java0.log 的文件,其中包含文本 FileHandlerTest,它是源类的名称。

我认为它不起作用有几个原因:

  1. 有一个切换到另一个线程,并且您在切换之前没有调用 LogRecord.getSourceClassName()。这会导致日志记录推断出错误的调用者。
  2. 您创建了一个“包装器”类来执行日志记录,并且记录器将“包装器”类报告为调用者。 不要这样做。直接使用记录器或使用日志记录框架。那里有很多伐木桥,你所创造的任何东西都将是海盗船的木板。也就是说,com.sun.mail.util.MailLogger包含所有用户评论都试图向您解释的代码。
  3. 记录是使用 logpsetSourceClassName 生成的,并且源类是伪造的。
  4. 您的 JVM 在生成带有堆栈跟踪的异常时出现问题。

您需要包含更多源代码和示例日志文件输出数据。

关于java - 获取 Formatter 的调用者类名 [使用文件处理程序进行 Java 日志记录],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48223419/

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