0

現在、アプリケーションを実行するたびに、ファイルが作成されます (Web.Config Logging セクションで指定されたファイル名)。

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

私はいくつかの調査を行いましたが、利用可能な例は私にとってはうまくいきません。誰かがコードサンプルを提供できれば幸いです。

4

2 に答える 2

0

実行時にトレース ログ ファイルを変更する必要があるだけの場合は、次のコマンドを使用して現在の tracelistener を簡単に削除できます。

System.Diagnostics.Trace.Listener.Remove("Listener1");

次に、新しいログ ファイル名で新しいリスナーを追加します。

System.Diagnostics.Trace.Listener.Add(新しい System.Diagnostics.TextWriterTraceListener("NewLogFileName.txt","Listener2");

これで、ログが NewLogFileName.txt に記録されます

于 2015-04-07T18:24:28.150 に答える
0

お気づきのように、要件は Enterprise Library の構成ベースのアプローチに自然に適合しません。それができないと言っているわけではありません。

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

1 つの方法は、ID から LogWriter へのマッピングを保持する IDictionary を作成することです。ID がチェックされたら、IDictionary に LogWriter が既に存在するかどうかを確認します。存在する場合はそれを使用し、存在しない場合は新しい LogWriter を作成します。

Logging Fluent Interfaceを使用して UnityContainer を構成し、LogWriter を解決して Dictionary に保存するサンプル コードを次に示します。

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;

これは単なるサンプルであり、スレッドセーフまたは抽象化されていませんが、うまくいけば役立つはずです。

于 2012-03-28T03:33:02.007 に答える