gpt4 book ai didi

java.util.logging 自定义格式化程序未按预期工作

转载 作者:行者123 更新时间:2023-12-01 11:48:46 26 4
gpt4 key购买 nike

我使用的是 Java 6。我创建了一个自定义格式化程序,它仅创建时间和消息,但除了时间和消息之外,它始终在两行中打印空类名称和方法名称以及日志级别:

2015 年 3 月 8 日下午 6:48:09 null null

全部:这是一条消息

此外,生成的日志文件采用以下格式,我希望它首先以 xxx.log.0 开头,一旦满了,然后是 xxx.log.1,但它同时生成了所有 10 个文件时间。

xxxx.log.0.9

xxxx.log.0.8

xxxx.log.0.7

xxxx.log.0.6

xxxx.log.0.5

xxxx.log.0.4

xxxx.log.0.3

有人可以告诉我如何仅记录时间和消息以及如何更正日志文件扩展名吗?非常感谢!

public class MyFormatter extends Formatter {
public String format(LogRecord record)
{
String recordStr = new Date() + " " + formatMessage(record)
return recordStr;
}
}

使用MyFormatter的代码:

Logger fileLogger = Logger.getLogger(xxxx.class.getPackage().getName());
FileHandler handler = new FileHandler(pattern, limit, numLogFiles, true);
MyFormatter formatter = new MyFormatter();
handler.setFormatter(formatter);
fileLogger.addHandler(handler);
Level logLevel = java.util.logging.Level.ALL;
fileLogger.log(new LogRecord(logLevel, "This is a message"));

最佳答案

I am using Java 6. I have created a custom formatter which creates only the time and the message, but it always prints null class name and method name and the log level besides the time and the message in two lines:

该输出来自 java.util.logging.SimpleFormatter它支持仅打印日期和消息。以下模式可用于更改 SimpleFormatter,使其像自定义格式化程序一样工作:

-Djava.util.logging.SimpleFormatter.format="[%1$tc] %5$s%n"

使用格式化程序的代码未设置 method name , class name ,或logger name 。调用Logger.log(Level,String)方法将为您计算调用站点。

        private static final Logger fileLogger = Logger.getLogger(xxxx.class.getPackage().getName());

private static void initLogging() throws IOException {
FileHandler handler = new FileHandler(pattern, limit, numLogFiles, true);
MyFormatter formatter = new MyFormatter();
handler.setFormatter(formatter);
fileLogger.addHandler(handler);
fileLogger.log(Level.ALL, "This is a message");
}

不确定这是否是有意的,但您应该使用 event time LogRecord 的时间而不是当前时间。

Also, the log files generated are in the following format, where I expected it to start with xxx.log.0 first, once it is full, then xxx.log.1, but it generated all 10 files at the same time.

对于每个 FileHandler当您创建一个具有相同模式的新对象之前,您必须确保它已被您的代码关闭。默认情况下,LogManager 将在关闭时关闭所有附加的处理程序。您还必须确保对保存附加处理程序的记录器拥有强引用。方法本地引用(例如您的示例中使用的方法)不算在内。

关于java.util.logging 自定义格式化程序未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28944716/

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