2009-07-22 4 views
1

Log4netを使用してファイル名を動的に割り当てる方法を知りたいです。私のアプリケーションは、ユーザー入力に基づいて10種類のファイルを動的に作成し、後で対応するファイル名に必要な名前拾い上げる情報とそれに書き込まれる情報log4 net動的ファイル名の割り当て

たとえば、私のアプリケーションでは、すべてのxmlファイルのビジネス要件に基づいて、xmlファイルと同じ名前の対応するログファイルを作成する必要があります。 xmlファイルは、対応するログファイルにエントリが必要です

助けてください。私はそれを

答えて

3

を書くために適切なログの制御を取得するために問題を抱えて、これを行っていないが、これを行う方法の数は、おそらくありますので、これが最善の方法ではないかもしれないが、それは

を動作するはずです
public OpenLogFile(string fileName) 
{ 
    log4net.Layout.ILayout layout = new log4net.Layout.PatternLayout("%d [%t]%-5p : - %m%n");;   
    log4net.Appender.FileAppender appender = new log4net.Appender.FileAppender(layout , filename); 
    appender.Threshold = log4net.Core.Level.Info; 
    log4net.Config.BasicConfigurator.Configure(appender); 
} 

ファイルを切り替える必要があるときは、OpenLogfileを呼び出してください。

レイアウトやアペンダーの種類を調整する必要がある場合があります。

この方法の大きな欠点は、xml構成が失われ、実行時に設定を変更できることです。だから、より良い方法は

プロパティを使用してXMLファイルにあなたのアペンダを構成することであるかもしれない例えば

file type="log4net.Util.PatternString" value="Logfiles\Log_For_%property{MyLogFileName}" 

次に、あなたのコード内で使用すると、プロパティ

log4net.GlobalContext.Properties["MyLogFileName"] = ...; 

を変更することができますトリッキーなビットですlog4netをリロードするようにします。私はこれのドキュメントを読んでいないので、リロードを強制する方法があるかどうかわかりません。 log4net.Config.XmlConfigurator.ConfigureAndWatchを再度呼び出すだけでうまくいくかもしれません。それ以外の場合は、xmlファイルを開いてもう一度保存した場合は動作します(何も変更する必要はありません)

これが役に立ちます。

+0

指摘ありがとうございます:log4net.GlobalContext.Properties ["MyLogFileName"] = ...; –

関連する問題