什么时候调用格式方法?

时间:2013-02-03 02:32:27

标签: java logging java.util.logging

在以下代码中,类MyCustomeFormatter扩展了Formatter。它还会覆盖format消息。这个方法何时被调用?例如:

logger.log(Level.INFO,"This is an info message")

语句将消息记录到指定的处理程序。但是overriden方法何时被称为?

import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;


public class MyCustomFormatter extends Formatter {

public MyCustomFormatter() {
    super();
}

public String format(LogRecord record) {

    // Create a StringBuffer to contain the formatted record
    // start with the date.
    StringBuffer sb = new StringBuffer();

    // Get the date from the LogRecord and add it to the buffer
    Date date = new Date(record.getMillis());
    sb.append(date.toString());
    sb.append(" ");

    // Get the level name and add it to the buffer
    sb.append(record.getLevel().getName());
    sb.append(" ");

    // Get the formatted message (includes localization 
    // and substitution of paramters) and add it to the buffer
    sb.append(formatMessage(record));
    sb.append("\n");

    return sb.toString();
}
}

1 个答案:

答案 0 :(得分:0)

Logger.log()来电Handler.publish()

如果处理程序继承自StreamHandler

public synchronized void publish(LogRecord record) {
    if (!isLoggable(record)) {
        return;
    }
    String msg;
    try {
        msg = getFormatter().format(record);
    } catch (Exception ex) {
        // We don't want to throw an exception here, but we
        // report the exception to any registered ErrorManager.
        reportError(null, ex, ErrorManager.FORMAT_FAILURE);
        return;
    }

    try {
        if (!doneHeader) {
            writer.write(getFormatter().getHead(this));
            doneHeader = true;
        }
        writer.write(msg);
    } catch (Exception ex) {
        // We don't want to throw an exception here, but we
        // report the exception to any registered ErrorManager.
        reportError(null, ex, ErrorManager.WRITE_FAILURE);
    }
}