2012-03-21 234 views
26

將日誌從log4net寫入文件時遇到一些麻煩。我似乎按照手冊中的描述完成了所有操作,但這不起作用。這裏是我的logging.config文件:將日誌寫入文件

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %message%newline" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

請與實際工作的配置文件的例子幫助。

+3

我敢打賭那幾個在互聯網上的例子 – 2012-03-21 13:10:58

+1

您是否配置Xml設置... http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.Configure_overload_5.html – Lloyd 2012-03-21 13:14:37

回答

34

你似乎並不有一個<root>元素引用您的appender:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="250KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
     </appender> 
     <root> 
     <level value="INFO" /> 
     <appender-ref ref="RollingFileAppender" /> 
     </root> 
    </log4net> 
</configuration> 
+3

謝謝,這是一個觀點。另外我發現你可以把將所有日誌重定向到文件。 – 2012-03-22 08:17:05

17

第一次啓動應用程序時,您是否調用過配置方法?

log4net.Config.XmlConfigurator.Configure(); 

如果是。你應該很好。檢查您正在編寫的磁盤上的文件權限。

如果你想讓你可以啓用log4net內部調試功能來弄清楚什麼是錯誤的。

http://logging.apache.org/log4net/release/faq.html#troubleshooting

+0

您也可以啓用log4net內部調試,詳細信息如這裏:http://logging.apache.org/log4net/release/faq.html#troubleshooting – paul 2012-03-21 13:15:55

+0

對於一個.NET Web應用程序,這行只需要調用一次?即在Global.asax文件的Application_Start()中?或者在每個用戶會話開始,即Session_Start()? – Seany84 2012-03-21 13:17:10

+0

@paul:添加到我的答案。謝謝Paul – Shyju 2012-03-21 13:18:41

6

有兩件事情可以做:

之一,如果你願意,你App.config文件,將配置自動登錄到使用一個單獨的配置文件中,加入以下。

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Config" value="log4.config"/> 
     <add key="log4net.Config.Watch" value="True"/> 
     <add key="log4net.Internal.Debug" value="False"/> 
    </appSettings> 
</configuration> 

否則,您需要在應用程序啓動時啓動日誌記錄。

//Initiate logging based on web.config file 
log4net.Config.XmlConfigurator.Configure(); 

// Create a logger for use in this class 
log4net.ILog log4 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
69

這是一個完整的一步一步的指導,以增加log4net的到您的項目時,Visual Studio 2012下和.NET 4.5。

  1. 將新的C#控制檯應用程序添加到您的解決方案。

  2. 選擇Tools >> Library Package Manager >> Manage NuGet Packages For Solution並搜索log4net。安裝它,然後選擇要添加log4net引用的項目。 enter image description here

  3. Program.cs編輯:

using System; 
namespace Log4Net 
{  
    class Program 
    { 
     private static readonly log4net.ILog log = log4net.LogManager.GetLogger 
       (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Writing to \"log.txt\" in the same directory as the .exe file.\n"); 
      log.Info("Info logging"); 
      try 
      { 
       throw new Exception("Exception!"); 
      } 
      catch (Exception e) 
      { 
       log.Error("This is my error", e); 
      } 
      Console.WriteLine("[any key to exit]"); 
      Console.ReadKey(); 
      } 
     } 
    } 
} 
  • 添加log4.config,右擊並選擇Properties然後選擇Copy to Output Directory - Copy If Newer
  • <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
        <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
        </startup> 
        <appSettings> 
         <add key="log4net.Config" value="log4.config"/> 
         <add key="log4net.Config.Watch" value="True"/> 
         <add key="log4net.Internal.Debug" value="False"/> 
        </appSettings> 
    </configuration> 
    
  • 運行程序和觀察:

  • <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
        <configSections> 
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
        </configSections> 
    
        <log4net> 
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
         <file value="log.txt" /> 
         <appendToFile value="true" /> 
         <rollingStyle value="Size" /> 
         <maxSizeRollBackups value="10" /> 
         <maximumFileSize value="250KB" /> 
         <staticLogFileName value="true" /> 
         <layout type="log4net.Layout.PatternLayout"> 
         <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
         </layout> 
        </appender> 
        <root> 
         <level value="ALL" /> 
         <appender-ref ref="RollingFileAppender" /> 
        </root> 
        </log4net> 
    </configuration> 
    
  • 編輯App.Config,使其與以下相匹配在輸出中創建的文件log.txt\bin\Debug\目錄:

    2013-08-10 11:54:26,798 [10] INFO Log4Net.Program [(null)] - Info logging 
    2013-08-10 11:54:26,824 [10] ERROR Log4Net.Program [(null)] - This is my error 
    System.Exception: Exception! 
        at Log4Net.Program.Main(String[] args) in C:\Test\Log4Net\Program.cs:line 14 
    
  • 在未來,如果你想添加log4net到另一個項目,選擇Tools >> Library Package Manager >> Manage NuGet Packages For Solution選擇log4net並單擊Manage然後勾選要添加log4net的項目。 enter image description here

  • +0

    只需注意configSections:「如果此元素位於配置文件中,它必須是元素的第一個子元素。」 https://msdn.microsoft.com/en-us/library/aa903350(v=vs.71).aspx – unicorn2 2017-06-27 07:01:03

    +0

    你能詳細說明一下App.config設置的播放嗎? – jxramos 2017-12-12 19:32:54

    +0

    @jxramos app.config中的設置控制與日誌記錄有關的所有事情,包括是否寫入文件,每行是什麼格式,是否寫入控制檯等等。查看log4net文檔可能更容易選項。 – Contango 2017-12-14 16:42:48

    2

    太棒了。這些問題的答案是正確的......除了他們沒有爲我

    搜索網工作,終於發現了我失蹤以下行Assembly.cs:

    [assembly: log4net.Config.XmlConfigurator]