web-dev-qa-db-ja.com

java.util.logging:日付行を抑制する方法

Java.util.loggingでデフォルトのロガーを使用しているときに、ロギング中に日付変更線の出力を抑制しようとしています。たとえば、次のような典型的な出力があります。

 2010年6月1日10:18:12 AMgamma.utility.application情報

情報:ping:db-time = 2010-06-01 10:18:12.0、local-time = 20100601t101812、duration = 180000
2010年6月1日10:21:12 AM gamma.utility.application info
情報:ping:db-time = 2010-06-01 10:21:12.0、local-time = 20100601t102112、duration = 180000

Jun 1, 2010...行を削除したいのですが、ログ出力が乱雑になっています。これどうやってするの?

19
andrewz

この問題は、親ログのハンドラーが原因で発生します。解決策は、親ログからすべてのハンドラーを削除してから、独自のカスタムハンドラーを追加することです。このコードは、親ログからハンドラーを削除します。

 for(Handler iHandler:log.getParent()。getHandlers())
 {
 log.getParent()。removeHandler(iHandler); 
} 
13
andrewz

Java SE 7から新しいシステムプロパティがあります:Java.util.logging.SimpleFormatter.format

同じプロパティは、Java.util.loggingプロパティファイル(logging.properties)でも構成できます。 Eclipseユーザーであり、コンソール出力の二重行メッセージに悩まされている場合は、次のようにjre logging.propertiesファイル(JDK_HOME/jre/lib/logging.properties)を変更できます。

Java.util.logging.SimpleFormatter.format =%4 $ s:%5 $ s [%1 $ tc]%n

いくつかのフォーマット例はここで入手できます: http://docs.Oracle.com/javase/7/docs/api/index.html?java/util/logging/SimpleFormatter.html

32
Demis Gallisto

_Java.util.logging.Formatter_クラスを拡張するカスタムフォーマッターを作成し、必要に応じてString format(LogRecord)メソッドを実装します。たとえば、次のフォーマッタは、ログメッセージ(および例外がログに記録されている場合はスロー可能なスタックトレース)のみを表示します。

_import Java.io.PrintWriter;
import Java.io.StringWriter;
import Java.util.logging.Formatter;
import Java.util.logging.LogRecord;

class CustomRecordFormatter extends Formatter {
    @Override
    public String format(final LogRecord r) {
        StringBuilder sb = new StringBuilder();
        sb.append(formatMessage(r)).append(System.getProperty("line.separator"));
        if (null != r.getThrown()) {
            sb.append("Throwable occurred: "); //$NON-NLS-1$
            Throwable t = r.getThrown();
            PrintWriter pw = null;
            try {
                StringWriter sw = new StringWriter();
                pw = new PrintWriter(sw);
                t.printStackTrace(pw);
                sb.append(sw.toString());
            } finally {
                if (pw != null) {
                    try {
                        pw.close();
                    } catch (Exception e) {
                        // ignore
                    }
                }
            }
        }
        return sb.toString();
    }
}
_

これがあなたの使い方です:

_import Java.util.logging.ConsoleHandler;
import Java.util.logging.Logger;

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

    static {
        CustomRecordFormatter formatter = new CustomRecordFormatter();
        ConsoleHandler consoleHandler = new ConsoleHandler();
        consoleHandler.setFormatter(formatter);
        LOGGER.addHandler(consoleHandler);
    }

    public void doSomething() {
        LOGGER.info("something happened");
    }
}
_
5
Abhinav Sarkar