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...
行を削除したいのですが、ログ出力が乱雑になっています。これどうやってするの?
この問題は、親ログのハンドラーが原因で発生します。解決策は、親ログからすべてのハンドラーを削除してから、独自のカスタムハンドラーを追加することです。このコードは、親ログからハンドラーを削除します。
for(Handler iHandler:log.getParent()。getHandlers()) { log.getParent()。removeHandler(iHandler); }
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 。
_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");
}
}
_