0

次のコードでは、クラスは。を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();
}
}
4

1 に答える 1

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);
    }
}
于 2013-02-03T02:56:49.133 に答える