2012-03-27 4 views
0

私はアプリケーションを実行するたびにすぐにファイル(Web.Configログセクションで指定されたファイル名)を作成します。QueryStringで渡されたGUIDに基づいて、実行時にログファイルの場所と名前を変更します。

私が望むのは、実行時に(クエリスティングとして渡すGUIDに基づいて)ファイルのパスと名前を変更することです。

私はいくつかの調査をしましたが、利用可能な例は私のために働いていません。誰かがコードサンプルを提供できるかどうかは分かります。

+0

に記録されます、あなたが要件上のビットを拡張することはできますか?ユーザーに基づいてログファイルです(各ユーザーが自分のログファイル/フォルダを取得します)? –

+0

私は別のロードしていますクエリ文字列にIDを渡すときのDLL ID 12345を渡すと、私のWebアプリケーションカチオンは12345.dllをロードします 私はID 67890をクエリ文字列に渡します。私のWebアプリケーションは67890.dllを読み込み、何でもします。 現在、ELにはフラットファイルリスナーがあり、ログファイル(LogInfo.log)を作成しています。アプリケーションの実行が終了したら、自分のIDであるファイルにリネームするだけです。 問題は、2つの異なるIDを使用して同じアプリケーションを2回同時に実行している場合です。 – Emahum

+0

私は自分のIDに基づいてフォルダとファイル名を作成したいと思います。私は渡して、それぞれのフォルダとファイルに情報を記録しています。 – Emahum

答えて

0

あなたの要件は、Enterprise Libraryの構成ベースのアプローチには当てはまりません。それはできないと言っているわけではありません。

目的を達成する1つの方法は、ログブロックのプログラムによる設定を使用することです。

IDのマッピングを保持するIDictionaryを作成して、LogWriterにする方法があります。 IDが来たら、IDictionaryにLogWriterが既に存在するかどうかを確認します。それが使用する場合はそれを使用し、そうでなければ新しいLogWriterを作成します。ここで

はUnityContainerを設定するには、Logging Fluent Interfaceを使用して、ログ・ライターを解決し、辞書に保存するいくつかのサンプルコードです:

int id = 123123; 
Dictionary<int, LogWriter> loggers = new Dictionary<int, LogWriter>(); 

ConfigurationSourceBuilder builder = new ConfigurationSourceBuilder(); 

builder.ConfigureLogging() 
     .WithOptions 
      .DoNotRevertImpersonation() 
     .SpecialSources.LoggingErrorsAndWarningsCategory.SendTo.FlatFile("Flat File Listener").ToFile(@"trace.log") 
     .LogToCategoryNamed("General") 
      .WithOptions.SetAsDefaultCategory() 
      .SendTo.FlatFile("AppSpecificFlatFile" + id) 
      .ToFile("logging" + id + ".log")  
      ; 

DictionaryConfigurationSource configSource = new DictionaryConfigurationSource(); 
builder.UpdateConfigurationWithReplace(configSource); 
coreExtension = new EnterpriseLibraryCoreExtension(configSource); 

IUnityContainer container = new UnityContainer(); 
container.AddExtension(coreExtension); 

var logger = container.Resolve<LogWriter>(); 

loggers[id] = logger; 

これは単なるサンプルで、安全か抽象化されたスレッドが、すべきではありませんさうまくいけば助けて。

+0

ありがとうございます。あなたは私を正しい道に向ける答えをします。 – Emahum

0

あなただけの実行時にトレースログファイルを変更する必要がある場合、あなたは、単に

System.Diagnostics.Trace.Listener.Remove(「LISTENER1」)を使用して現在のTraceListenerを削除することができます。

その後

System.Diagnostics.Trace.Listener.Add(新System.Diagnostics.TextWriterTraceListener( "NewLogFileName.txt"、 "Listener2")、として新しいログファイルの名前で新しいリスナーを追加します。

は今、あなたのログがNewLogFileName.txt

関連する問題