2009-07-24 7 views
1

私は現在、java.util.logging.Loggerに関する2つの問題を抱えています:
1) )メソッドのように、これらのメソッドは出力後に改行を挿入しないでください(System.out.printやprintlnのような機能)。私はすでにformat()メソッドをオーバーライドしました。ログレコードに "no-linebreak-flag"を追加し、フォーマットメソッドでこれを分析するだけで済むか、これは遅すぎるでしょうか?このようなsthgを達成する正しい方法はどちらですか?Java Logger - "改行なし"と "明示的クラスロギング"の問題

2)現在、私は希望のLoggerを作成するファクトリクラスを持っています(FileLoggingとConsole Loggingの違いがあります)。 Loggerにどのパッケージ/クラス( "modules")を記録するかを知らせる方法を教えてください。あるいは、各クラスのDebugフラグをチェックしてからLogger(debug == true)を作成するか、いいえ? また、可能であれば、ロギングプロパティファイルではなく、ソースコードを介して必要な設定をすべて行いたいと考えています。

私はロガーについて何か感じています。私はまだ理解できません^^

ありがとうございます!

答えて

1

on#2 - すべての情報をロギング設定ファイルに入れる必要があります。要点は、コードのこの種のものを、プロパティファイルに「スライス」することです。

は、基本的には - あなたは常にあなたのコード内でlogger.debug()を呼び出し、およびログがデバッグメッセージをフィルタリングするように設定されている場合、あなたは私が

のようなコードを見てきました

裾からの出力は表示されません

if(logger.debugenabled()){ 
    logger.debug(); 
} 

私が質問したとき、人々はlogger.debug呼び出しのパフォーマンス上の犠牲を望まないと言ってきました。私の謙虚な意見は、これはほんのわずかな割合のアプリケーションにのみ関連し、おそらくlogger.debug呼び出しを残して、ロギングフレームワークがそれを処理するようにしなければならないということです。

私はコンソールアペンダーのソースコードをチェックしました。改行がハードコードされているように見えます。

 for (int i = 0; i < len; i++) { 
     this.writer.write(s[i]); 
     this.writer.write(Layout.LINE_SEP); 
     } 
    } 
    } 
+1

「if debugEnabled」イディオムの本当の理由は、デバッグに渡される引数文字列を組み立てる(しばしばかなりの)コストを避けるからです。 –

関連する問題