有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    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 nameclass namelogger 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,而不是当前时间

    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,在使用相同的模式创建一个新的FileHandler之前,必须确保它已被代码关闭。默认情况下,LogManager将在关机时关闭所有连接的处理程序。您还必须确保持有对保存附加处理程序的记录器的强引用。方法本地引用(如示例中使用的引用)不起作用