2016/08/23

Windows Form Log4Net

Log4Net是一個可以紀錄運作和系統狀態以及錯誤訊息的Library,可用於.Net平台
安裝則可以透過Nuget輸入
Install-Package log4net

該範例則提供固定的log檔以及依照日期下去產生的log檔,使用前需要至App.config設定並在程式內調用Log4Net的方法

using log4net;
using System;
using System.Reflection;
using System.Windows.Forms;

namespace Test
{
  public partial class Form1 : Form
  {
    /// <summary>
    /// Logger
    /// </summary>
    private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.Name);

    public Form1()
    {
      InitializeComponent();
      //初始化Log4Net
      log4net.Config.XmlConfigurator.Configure();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      //輸出至log檔
      log.Info("button1Click");

      try
      {
        Convert.ToDouble("ss");
      }
      catch (FormatException ex)
      {
        //將錯誤訊息輸出至log檔
        log.Error(ex.StackTrace);
      }
    }

  }
}






固定Log設定:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <!--引入Log4Net-->
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>

  <log4net>
    <!--Output File-->
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--檔案名稱-->
      <file value="Log/Test.txt"/>
      <!--Unicode-->
      <encoding value="utf-8" />
      <appendToFile value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackups value="1"/>
      <!--檔案最大容量-->
      <maximumFileSize value="100MB"/>
      <!--非固定的檔案名稱-->
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--日期 Thread 層級 Logger名稱 訊息 換行-->
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
      </layout>
    </appender>

    <!--除錯訊息-->
    <appender name="DebugAppender" type="log4net.Appender.DebugAppender">
      <immediateFlush value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--日期 Thread 層級 Logger名稱 訊息 換行-->
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
      </layout>
    </appender>
    
    <!--載入設定-->
    <root>
      <level value="ALL"/>
      <appender-ref ref="DebugAppender"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
  </log4net>
</configuration>


日期設定:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--引入Log4Net-->
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  
  <log4net>
    <!--Output File-->
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--路徑-->
      <file value="Log/"/>
      <!--檔案名稱-->
      <datePattern name="DatePattern" value="yyyy_MM_dd'.log'" ></datePattern>
      <!--Unicode-->
      <encoding value="utf-8" />
      <appendToFile value="true"/>
      <rollingStyle value="Composite"/>
      <maxSizeRollBackups value="1"/>
      <!--檔案最大容量-->
      <maximumFileSize value="100MB"/>
      <!--非固定的檔案名稱-->
      <staticLogFileName value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--日期 Thread 層級 Logger名稱 訊息 換行-->
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
      </layout>
    </appender>
    
    <!--除錯訊息-->
    <appender name="DebugAppender" type="log4net.Appender.DebugAppender">
      <immediateFlush value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--日期 Thread 層級 Logger名稱 訊息 換行-->
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
      </layout>
    </appender>
    <!--載入設定-->
    <root>
      <level value="ALL"/>
      <appender-ref ref="DebugAppender"/>
      <appender-ref ref="RollingFileAppender"/>
    </root>
  </log4net>

</configuration>

執行結果:
日期輸出:



固定Log輸出: