Java如何创建自定义记录器格式化程序?
要创建自定义,Formatter我们需要扩展java.util.logging.Formatter抽象类并实现该format(LogRecord)方法。然后,在该方法中,我们可以格式化存储在中的日志消息LogRecord以符合我们的需求。
该java.util.logging.Formatter班也有getHead(Handler)和getTail(Handler)可重写的头部和尾部添加到我们的日志信息。
package org.nhooo.example.util.logging;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.*;
public class LogCustomFormatter {
public static void main(String[] args) {
Logger logger = Logger.getLogger(LogCustomFormatter.class.getName());
logger.setUseParentHandlers(false);
MyFormatter formatter = new MyFormatter();
ConsoleHandler handler = new ConsoleHandler();
handler.setFormatter(formatter);
logger.addHandler(handler);
logger.info("Example of creating custom formatter.");
logger.warning("A warning message.");
logger.severe("A severe message.");
}
}
class MyFormatter extends Formatter {
//创建一个DateFormat来格式化记录器时间戳。
private static final DateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
public String format(LogRecord record) {
StringBuilder builder = new StringBuilder(1000);
builder.append(df.format(new Date(record.getMillis()))).append(" - ");
builder.append("[").append(record.getSourceClassName()).append(".");
builder.append(record.getSourceMethodName()).append("] - ");
builder.append("[").append(record.getLevel()).append("] - ");
builder.append(formatMessage(record));
builder.append("\n");
return builder.toString();
}
public String getHead(Handler h) {
return super.getHead(h);
}
public String getTail(Handler h) {
return super.getTail(h);
}
}下面是上面的自定义格式化程序产生的输出。
01/05/2009 06:22:09.372 - [org.nhooo.example.util.logging.LogCustomFormatter.main] - [INFO] - Example of creating custom formatter. 01/05/2009 06:22:09.374 - [org.nhooo.example.util.logging.LogCustomFormatter.main] - [WARNING] - A warning message. 01/05/2009 06:22:09.374 - [org.nhooo.example.util.logging.LogCustomFormatter.main] - [SEVERE] - A severe message.