1

複数のハンドラーが 1 つのロガーに設定されている状況があります。各ハンドラーは、機密情報が記録されないように置き換えます。

以下のSSCCEをご覧ください

import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import java.util.logging.Logger;


public class TestLogging {

    public static void main(String[] args) {
        Logger logger=Logger.getLogger(A.class.getName());
        logger.addHandler(new ConsoleHandler(){
            {
                setFormatter(new Formatter() {
                    @Override
                    public String format(LogRecord record) {
                        return record.getMessage().replaceAll("method","replacing method");
                    }
                });
            }
        });
        logger.addHandler(new ConsoleHandler(){
            {
                setFormatter(new Formatter() {
                    @Override
                    public String format(LogRecord record) {
                        return record.getMessage().replaceAll("Logging","replacing logging");
                    }
                });
            }
        });
        logger.setUseParentHandlers(false);

        A a =new A();
        a.method();
    }


    public static class A{

        private static final Logger LOGGER=Logger.getLogger(A.class.getName());

        public void method(){
            LOGGER.info("\nLogging from inside method");
        }
    }
}

出力を「置換メソッド内からのロギングの置換」にしたいのですが、代わりにこのような出力が得られます

Logging from inside replacing method
replacing logging from inside method

別のハンドラーが既に設定されている場合、これらの両方のハンドラーを 1 つにマージするにはどうすればよいですか?

4

1 に答える 1