Dot-Net

使用 Log4Net 以程式方式強制一個新的日誌文件

  • March 26, 2014

注意:我閱讀了這個問題和答案,但它不適用於我想要的:Log4Net:以程式方式指定多個記錄器(帶有多個文件附加程序)

我有一個 WCF 服務,它是一種“問答”式服務。它獲取輸入並發送輸出。它根本不會持續存在。

我需要將每個問答會話記錄在一個單獨的文件中。

我有一個 Appender(目前是 RollingAppender)。

有沒有辦法為每次呼叫我的 WCF 服務啟動一個新的日誌文件?

注意:我使用的是 XML 佈局,其想法是可以解析日誌輸出並以圖形方式顯示(稍後的功能)。有點像“查詢計劃”。這是我需要將它們放在單獨的文件中的另一個原因。

注意:如果需要其他原因,Log4Net XmlLayoutBase 將不會刪除 xml 頁腳,直到應用程序關閉。對於託管在 IIS 中的 WCF 服務,這並不是真正的計劃事件。

而不是記錄到文件,也許您可以嘗試記錄到數據庫表並使用記錄的數據記錄會話 ID。通過這種方式,您可以根據會話 ID 對錶進行選擇並僅查看其數據。

這似乎對我有用:

public static void StartNewFile(this ILog log, string newFileName)
{
   Logger logger = (Logger) log.Logger;

   while (logger != null)
   {
       foreach (IAppender appender in logger.Appenders)
       {
           FileAppender fileAppender = appender as FileAppender;
           if (fileAppender != null)
           {
               fileAppender.File = newFileName;
               fileAppender.ActivateOptions();
           }
       }
       logger = logger.Parent;
   }
}

它需要以下參考資料:

using log4net;
using log4net.Appender;
using log4net.Repository.Hierarchy;

引用自:https://stackoverflow.com/questions/16304810