2014-09-04 108 views
1

我決定使用log4net來處理我正在處理的應用程序的所有日誌記錄活動...閱讀完文檔後,我決定開始進行實驗,但在第一次嘗試失敗後嘗試log4net BasicConfigurator未在控制檯上打印

該應用程序正在使用MonoDevelop 3.0.3.2在相當標準的Debian 7發行版中使用C#開發,以便稍後部署在Linux機器上。

到目前爲止,代碼是微不足道的,它遵循log4net文檔中非常早期的步驟,並在文章末尾加以引用。

問題是記錄器不打印任何東西到控制檯;在試圖理解發生了什麼問題的同時,我用調試器研究了它;我看到日誌引用包含AppendersCollection,不幸是空的我猜在配置過程中某些東西不能正常工作,並且我沒有appender,因此沒有日誌輸出。

我錯過了什麼?任何建議? MonoDevelop-Linux-log4net的組合存在某種我不知道的問題嗎?

using System; 
using log4net; 
using log4net.Config; 

namespace TestLog4Net 
{ 
    class MainClass 
    { 
     private static readonly ILog log = LogManager.GetLogger(typeof(MainClass)); 

     public static void Main (string[] args) 
     { 
      BasicConfigurator.Configure(); 

      Console.WriteLine ("Hello World!"); 
      log.Info("Hello World!"); 
     } 
    } 
} 

UPDATE

我做了一些測試,加載配置文件。 我創建了3個記錄器,每個記錄器都有自己的appender,兩個是滾動文件appender,另一個是控制檯appender。 然後我登錄「Hello World!」在每個記錄器上。 滾動文件記錄器按預期工作,而無法找到ConsoleLogger的輸出。我用調試器和木012檢查對象不顯示一個空的AppenderCollection,但沒有輸出無論如何。您可以在下面找到更新後的代碼以及配置文件。

using System; 
using log4net; 
using log4net.Config; 

namespace TestLog4Net 
{ 
    class MainClass 
    { 

     public static void Main (string[] args) 
     { 
      XmlConfigurator.Configure(new System.IO.FileInfo("app.config")); 

      ILog rflogger1 = LogManager.GetLogger("RFLoggerOne"); 
      ILog rflogger2 = LogManager.GetLogger("RFLoggerTwo"); 
      ILog clogger = LogManager.GetLogger("CLogger"); 

      rflogger1.Info("Hello World!"); 
      rflogger2.Info("Hello World!"); 
      clogger.Info("Hello World!"); 

      Console.WriteLine ("Hello World!"); 
     } 
    } 
} 

<log4net> 
<appender name="CAppender" type="log4net.Appender.AnsiColorTerminalAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 

<appender name="RFAppender1" type="log4net.Appender.RollingFileAppender"> 
    <file value="rf1.log"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Composite"/> 
    <datePattern value="yyyyMMdd"/> 
    <maxSizeRollBackups value="10"/> 
    <maximumFileSize value="1000000"/> 
    <staticLogFileName value="true"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline"/> 
    </layout> 
</appender> 

<appender name="RFAppender2" type="log4net.Appender.RollingFileAppender"> 
    <file value="rf2.log" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="100KB" /> 
    <maxSizeRollBackups value="2" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level %thread %logger - %message%newline" /> 
    </layout> 
</appender> 


<logger name="CLogger"> 
    <level value="ALL"/> 
    <appender-ref ref="CAppender"/> 
</logger> 

<logger name="RFLoggerOne"> 
    <level value="ALL"/> 
    <appender-ref ref="RFAppender1"/> 
</logger> 

<logger name="RFLoggerTwo"> 
    <level value="ALL"/> 
    <appender-ref ref="RFAppender2"/> 
</logger> 


<root> 
    <level value="ALL"/> 
</root> 
</log4net> 
+0

你可以在你的app.config或/和log4net配置中顯示你的log4net配置嗎? – Peter 2014-09-04 15:13:35

+0

@peer:附加的代碼應該使用BasicConfigurator,並根據文檔,不需要配置文件...在此期間,我用配置文件進行了一些測試,發現我遇到了問題與ConsoleAppender,而RollingFileAppender工作正常,讓我用新的代碼和配置文件更新原始帖子。 – BaroneAshura 2014-09-04 15:24:30

回答

0

你使用哪種類型的項目?控制檯應用程序? 有幾種情況你不會在控制檯上看到std :: out或std :: err的輸出。 看看這篇文章: Can one executable be both a console and GUI application?

+0

項目創建完成後,它被創建爲MonoDevelop中的C#控制檯應用程序,並且附加的源代碼是唯一的源文件,它是項目的一部分。自項目創建以來,我並沒有在項目設置中調整過任何內容,而且該項目只是爲了使用log4net進行一些測試而創建的。所以我敢說它是一個控制檯應用程序。 – BaroneAshura 2014-09-04 16:08:01