Java Logging APIでログレベル毎に出力先を分けたい

Java Logging APIのConsoleHandlerはデフォルトでSystem.errに出力する。
今回はLevel.INFOから下はSystem.outでそれより上はSystem.errに出力のように
出力先を分けたいと思ったので作ったものをメモ

作ったクラス

package jp.yustam.logging;

import java.io.OutputStream;
import java.util.logging.Filter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;
import java.util.logging.StreamHandler;

public class CustomHandler extends StreamHandler {

    public CustomHandler(OutputStream out, Level min, Level max) {
        super();
        setOutputStream(out);
        setFilter(new CustomFilter(min, max));
        setFormatter(new SimpleFormatter());
        setLevel(Level.ALL);
    }

    @Override
    public synchronized void publish(LogRecord record) {
        super.publish(record);
        flush();
    }

    @Override
    public void close() {
        flush();
    }
}

class CustomFilter implements Filter {

    /** 出力する最小のレベル */
    private final Level min;
    /** 出力する最大のレベル */
    private final Level max;

    CustomFilter(Level min, Level max) {
        this.min = min;
        this.max = max;
    }

    public boolean isLoggable(LogRecord record) {
        return (min.intValue() <= record.getLevel().intValue())
                && record.getLevel().intValue() <= max.intValue();
    }

}

使い方

private static Logger logger = null;
protected static Logger getLogger(){
    if (logger == null) {
        logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
        // ↓を設定しないとデフォルトのログも一緒に出る
        logger.setUseParentHandlers(false);
        // FINEST < FINER < FINE < CONFIG < INFO < WARNING < SEVERE
        logger.addHandler(new CustomHandler(System.out, Level.FINEST, Level.INFO));
        logger.addHandler(new CustomHandler(System.err, Level.WARNING, Level.SEVERE));
    }
    return logger;
}