Java logging APIで1行にログを出力させる

JavaのLogging APIは、通常の開発の場面ではもちろん、常時動作するサーバなどの用途でも用いられるログ出力用のAPIです。最近このAPIに興味を持ったので、ちょっと調べてみました。

[web] Java Loggin API
[web] JavaでHello World ログ機能編

で、具体的な使い方については上のURLを参照していただくとして、ここでは1回のログ出力を1行にまとめるHanlderを掲載します。デフォルトのログフォーマットは複数行にわたって出力されることが多いのですが、これだとシェルでgrep検索をするときにちょっと面倒です。

そこで、Java Logging APIというページでも紹介されているFormatterを少し改善して、Java6でも使えるものを紹介します。(Java Logging APIで紹介されているMyFormatterクラスでは、Java 1.4beta2ですでにJava APIから削除されたメソッドが使用されています。)


import java.util.logging.Formatter;

final class MyFormatter extends Formatter {

private Calendar calendar = Calendar.getInstance();

public synchronized String format(LogRecord record) {
StringBuilder message = new StringBuilder(100);
calendar.setTimeInMillis(record.getMillis());

message.append(
String.format(
"%1$tD %1$tT %2$s ",
calendar,
record.getLevel().toString()));

if (null != record.getSourceClassName()) {
message.append(
record.getSourceClassName());
} else {
message.append(
record.getLoggerName());
}
message.append(' ');

if (null != record.getSourceMethodName()) {
message.append(
String.format(
"[%s]",
record.getSourceMethodName()));
}
message.append(' ');

message.append(formatMessage(record));
message.append('\n');

if (null != record.getThrown()) {
message.append(
record.getThrown());
}
return message.toString();
}
}
あとは、これを出力先のHandlerに与えればOKです。

前へ

TeXで数式の記号を太字などに変更する

次へ

DebianでLANGを設定する