2012-03-27 35 views
0

現在,無論何時運行應用程序它都會創建一個文件(在Web.Config日誌記錄節中指定的文件名)。根據在QueryString中傳遞的GUID,在運行時更改日誌文件的位置和名稱

我想要的是在運行時更改文件的路徑和名稱(基於GUID作爲查詢刺痛傳遞)。

我做了一些研究,但可用的例子不適合我。如果有人可以提供代碼示例,將很感激。

+0

你能擴大的要求一點?是基於用戶日誌文件(每個用戶得到自己的日誌文件/文件夾)? – 2012-03-27 17:39:18

+0

我加載不同在查詢字符串中傳遞ID時使用的DLL 所以,如果我傳遞ID 12345,我的web應用程序陽離子將加載12345.dll 如果我在查詢字符串中傳遞ID 67890。我的web應用程序將加載67890.dll並執行任何操作。 現在在EL我有平面文件監聽器,它創建日誌文件(LogInfo.log),當應用程序完成運行時,我只是將文件重命名爲任何我的ID。 問題是當我用兩個不同的ID同時運行兩次相同的應用程序時。 – Emahum 2012-03-28 02:07:46

+0

我只是想創建基於我的ID的文件夾和文件名,我正在傳遞並將信息記錄在相應的文件夾和文件中。 – Emahum 2012-03-28 02:07:51

回答

0

正如您發現的那樣,您的需求並不適合企業庫的基於配置的方法。這並不是說它不能完成。

完成您想要的一種方法是使用日誌塊的編程配置。

一種方法是創建一個IDictionary來保存ID到LogWriters的映射。當一個ID進來時,檢查IDictionary中是否已經存在一個LogWriter。如果確實如此,則使用它,如果沒有,則創建一個新的LogWriter。

下面是使用Logging Fluent Interface配置UnityContainer,然後解決了一個寫進程並將其保存到一個字典一些示例代碼:

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 2012-03-30 13:02:17

0

如果你只需要在運行時更改跟蹤日誌文件,你可以簡單地刪除使用

System.Diagnostics.Trace.Listener.Remove(「Listener1」)當前的TraceListener;

然後添加一個新的監聽器與新的日誌文件名,

System.Diagnostics.Trace.Listener.Add(新System.Diagnostics.TextWriterTraceListener( 「NewLogFileName.txt」, 「LISTENER2」);

現在你的日誌將被記錄到NewLogFileName.txt

相關問題