2009-04-16 92 views
140

我一直使用log4net,但有一件事我從來沒有想過如何知道里面發生了什麼。例如,我的項目中有一個控制檯appender和一個數據庫appender。我對數據庫和代碼進行了一些更改,現在數據庫appender不再工作。我會弄清楚爲什麼最終,但如果我能看到log4net中發生了什麼,它會有很大的幫助。如何追蹤log4net問題

是否log4net生成任何類型的輸出,我可以查看嘗試確定我的問題的來源?

回答

224

首先,你必須設置這個值的應用程序配置文件:

<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

然後,確定要保存輸出,你可以在同一個config文件中添加以下代碼的文件:

<configuration> 
... 

<system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
      <add 
       name="textWriterTraceListener" 
       type="System.Diagnostics.TextWriterTraceListener" 
       initializeData="C:\tmp\log4net.txt" /> 
     </listeners> 
    </trace> 
</system.diagnostics> 

... 
</configuration> 

你可以找到 下一個更詳細的解釋'如何啓用log4net的內部調試? 在log4net FAQ page

+7

只需確保您的應用程序正在運行的進程具有您想要創建日誌文本文件的路徑的權限(以上示例中爲「C:\ tmp \ log4net.txt」) – Jtrx 2015-05-27 13:26:06

15

除了上面的答案,您可以使用此行實時查看日誌,而不是c:\ tmp \ log4net.txt輸出。

log4net.Util.LogLog.InternalDebugging = true; 

例如,在控制檯應用程序中,您可以添加此選項,然後實時觀看輸出。在一個小測試工具中調試log4net以查看您正在測試的appender正在發生什麼情況。

24

如果您使用的是log4net的配置文件,您還可以通過更改頂級節點打開調試有:一旦配置被重新裝載

<log4net debug="true"> 

這將工作,假設您的跟蹤監聽器的設置是否正確。

0

如果內部日誌不能提供足夠的信息,則構建和調試source code非常容易。如果您不想將其與開發項目混合使用,請添加一個簡單的控制檯應用程序,它只記錄一條消息,將項目的log4net.config複製到此應用程序,並調試相關的類。

0

確保您的入口點所在的根應用程序將日誌記錄到log4net。給它一個這樣的:

private static ILog logger = LogManager.GetLogger(typeof(Program)); 
static void Main(string[] args) 
{ 
    logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString()); 

隨着2.0.8,我有一個有趣的情況。我創建了一個庫項目和一個測試exe項目來演示它的功能。圖書館項目設置爲使用Log4net和exe項目一樣。該exe項目使用assemblyinfo屬性來註冊配置,但我沒有得到日誌輸出到控制檯或日誌文件。當我打開log4net內部調試日誌記錄時,我得到了一些內部消息寫入控制檯,但仍然沒有我的正常日誌。沒有錯誤報告。當我將上面的代碼添加到我的程序中時,它開始工作。否則Log4net安裝正確。