JAVAutil。日志自定义格式化程序未按预期工作
我正在使用Java6。我创建了一个自定义格式化程序,它只创建时间和消息,但它总是在两行中打印空类名、方法名和日志级别,时间和消息除外:
2015年3月8日下午6:48:09空
所有人:这是一条信息
此外,生成的日志文件采用以下格式,我希望它以xxx开头。日志首先是0,一旦满了,然后是xxx。日志1,但它同时生成了所有10个文件
xxxx。日志0.9
xxxx。日志0.8
xxxx。日志0.7
xxxx。日志0.6
xxxx。日志0.5
xxxx。日志0.4
xxxx。日志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"));
# 1 楼答案
该输出来自java.util.logging.SimpleFormatter,它只支持打印日期和消息。可以使用以下模式将SimpleFormatter更改为与自定义格式化程序类似的工作方式:
使用格式化程序的代码没有设置method name、class name或logger name。调用Logger.log(Level,String)方法将为您计算调用站点
不确定是否需要,但是,您应该使用日志记录的event time,而不是当前时间
对于您创建的每一个FileHandler,在使用相同的模式创建一个新的FileHandler之前,必须确保它已被代码关闭。默认情况下,LogManager将在关机时关闭所有连接的处理程序。您还必须确保持有对保存附加处理程序的记录器的强引用。方法本地引用(如示例中使用的引用)不起作用