Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ログ出力で空白行

お世話になります。

log4jでログを出力しています。
出力中の任意の場所で、空白行を挿入したいのですが、
良策をご存知の方がいましたら、ご教授願います。

現在はlog4j.propertiesにてレイアウト定義しており、
%p,%d,%m,%Cパラメータを使用しています。
出力元で空文字などを出力しても、%p,%d,%Cが
出力されるので、空白行にならず、困っています。

最悪、パラメータは%mのみとし、通常の出力は
"[INFO] yyyy.mm.dd メッセージ class"とし、
空白行時は
""とする方法しか思いつかないのですが、
利便性が低下するので、他に方法が無いものかと思い、
投稿致しました。

よろしくお願いいたします。

※空白行挿入の理由は、視認性向上のためです。

4

回答

4769

閲覧

4件の回答

評価

0

%n%nとすれば?
一行ずつ交互になるはずだよん

評価

0

返答ありがとうございます。
%n%nというのは、1行毎に空白行が入るということですよね?
説明不足ですみません。
空白行を入れたいのは任意の場所で、毎行ではないのです。

[INFO] yyyy.mm.dd メッセージ1-1 class
[INFO] yyyy.mm.dd メッセージ1-2 class
[INFO] yyyy.mm.dd メッセージ1-3 class

[INFO] yyyy.mm.dd メッセージ2-1 class
[INFO] yyyy.mm.dd メッセージ2-2 class

というような感じです。

評価

0

実際出力を行いクラスを継承した自作クラスを作って
log4jのappenderを自作のクラスに指定することで
何とか対応できました。
(その時、こちらの方々に助けて貰いました。感謝感謝)



その時の作業を簡単に説明すると、
コンソール出力では、
1. org.apache.log4j.ConsoleAppenderを継承した自作クラスを作ります。
2. 自作クラスからWritwAppenderのsubAppendメソッドをオーバーライドします。
 このメソッドでログの書き込みを行いますので、
 ここで空の場合は、改行するようにします。
 このようにすればいいかと思います。

    public void subAppend(LoggingEvent event) {
        // 出力メッセージ
        String msg = (String) event.getMessage(); 
        // メッセージが空なら改行出力
        if (msg != null && msg.equals("")) {
            qw.write("\r\n");
        // 改行以外は親任せ
        } else {
            super.subAppend(event);    
        }
    }

ファイル出力も同じです。継承するAppenderクラス(多分RollingFileAppenderでしょう)が
違うだけで、メソッドは一緒ですので、同じくオーバーライドすればいいです。

評価

0

返答ありがとうございます。
なるほど、無いものは作るというわけですね。
期待通りの結果となり、助かりました。
ありがとうございます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。