2011-11-23 15 views
20

jdkロギングの設定に関する質問があります。私は、メッセージを出力するためにJDKロギングを使用するEJB(glassfishにデプロイされている)を持っています。 は、そのため私はこのようなコードで名前のロガーを使用します。Javaロギング - 出力をロガーのカスタムログファイルにリダイレクトする方法

private static Logger logger = Logger.getLogger("org.imixs.workflow"); 
..... 
     logger.fine(" some info..."); 
.... 

私はGlassfishのからlogging.propertiesファイルに以下の行を追加することによって、私のロガーのログレベルを設定することができることを知っている:

..... 
org.imixs.workflow.level=FINE 

しかし、私のロガーの出力ファイルはどのように指定できますか?私は 'org.imixs.workflow'という名前のロガーからのすべてのメッセージを別々のファイルに入れたいと思います。これは可能ですか?あなたはFileHandlerを使用する必要があります任意の助け

答えて

28

若干混乱パターンプロパティは、パターンが実行時に置換される、以下の特別な構成要素を含む文字列で構成され、この

handlers=java.util.logging.FileHandler 
# Default global logging level. 
.level=INFO 

#logging level for the foo.bar package 
foo.bar.level=CONFIG 
java.util.logging.FileHandler.pattern=%h/java%u.log 

のために使用することができますローカルパス名のセパレータ

「%のT」システムの一時ディレクトリ

「%のH」「のuser.home」システム支柱の値erty

回転ログ

を区別するため、 "%gの" 世代番号競合

を解決するために、 "%がU" 一意の番号 "%%" 単一のパーセント記号に変換 "%"

複数のファイルにログを記録したい場合にはトリックがあることがある見ることができるように、あなたは複数の名前付きロガー

#FileHandler for file1  
java.util.logging.FileHandler.pattern = logging_property_test.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

#FileHandler for file2 
logging.FileHandler2.pattern = logging_property_test2.log 
logging.FileHandler2.limit = 50000 
FileHandler.count = 1 
logging.FileHandler2.formatter = java.util.logging.SimpleFormatter 


#setting handler for logger1 
logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler 

#setting handler for logger2 
logging.PropertyTestingLogger2.handlers=logging.FileHandler2 

ための設定複数のハンドラによってそれを行うことができます 残念ながらジャワの作成者が予想していなかった、誰もが複数のファイルにログインする:カスタムクラスで、何もしませんが、FileHandlerの

package logging; 

import java.io.IOException; 
import java.util.logging.FileHandler; 

public class FileHandler2 extends FileHandler { 

    public FileHandler2() throws IOException, SecurityException { 
     super(); 
    } 

} 

背景を拡張logging.FileHandler2。それされていない、のjava.util.loggingで

public class FileHandler extends StreamHandler { 

    private String pattern; 

    private void configure() { 

     String cname = getClass().getName(); 
     pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log"); 
+0

しかし、このパターンを使用して、名前付きロガー(org.imixs.workflow)にのみ影響することを指定するにはどうすればよいですか?一般的なサーバーのメッセージをアプリケーション固有のログファイルにリダイレクトしたくありません。 – Ralph

+0

私はそれに応じて自分の投稿を更新しました。この例では、デフォルトのログレベルはinfoに設定されていますが、設定するfoo.barパッケージは –

+0

はいですが、私の質問です。ログファイル 'foo.bar'に別の出力ファイルを設定することは可能ですか?私はあなたが各パッケージのための別のログレベルを指定できることを知っています。しかし、別々のログファイルをどのように定義するのですか?正直なところ私は知らない。 – Ralph

10

ため

感謝。

FileHandler fileHandler = new FileHandler("myLogFile"); 
logger.addHandler(fileHandler); 

ロガーを設定するいくつかの明確な例については、Example Depotを参照してください。

these answersがプロパティファイルから設定するのに便利です。

「/」のFileHandlerの

+3

でも、設定ファイルでこれを行うことができます - ソースコードのログファイルにハードコードされたファイル名を指定する必要はありませんでしたか? – Ralph

3

:あなたはjava.util.logging.FileHandlerのソースを見れば、あなたは、パターンのプロパティは、クラス名によってロードされていることを、わかります設定ファイルを変更するだけで簡単に実行できます。残念ながら、FileHandlerを拡張し、ログに記録したいものをフィルタするようにハンドラを設定する必要があります。

関連する問題