淺談Log4net在項目中如何記錄日志


一    引入背景

       在軟件開發周期中,無論是開發中,或是測試中,或是上線后,選擇合適的工具監控程序的運行狀態至關重要,只有如此,才能更好地排查程序問題和檢測程序性能問題等。本篇文章主要與大家分享,如何利用Log4net在項目中記錄日志文件。在應用程序出現問題時,啟用日志記錄有助於解決問題。使用log4net,可以在運行時啟用日志記錄,而無需修改應用程序二進制文件。log4net是幫助程序員輸出日志語句到各種輸出目標的工具。

log4net支持如下框架:

  • NET Standard 1.3 via .NET Core 1.0
  • Microsoft® .NET Framework 1.0
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 2.0
  • Microsoft .NET Framework 3.5
  • Microsoft .NET Framework 4.0
  • Microsoft .NET Framework 4.5
  • Microsoft .NET Framework 3.5 Client Profile
  • Microsoft .NET Framework 4.0 Client Profile
  • Microsoft .NET Compact Framework 1.0
  • Microsoft .NET Compact Framework 2.0
  • Mono 1.0
  • Mono 2.0
  • Mono 3.5
  • Mono 4.0
  • Microsoft Shared Source CLI 1.0
  • CLI 1.0 Compatible

二    log4net概述

(一)日志級別

1.級別歸納

2.級別比較

(1)級別從低=>高排序:ALL<Debug<Info<Warn<Error<Fatal<OFF

(2)日志不能記錄低於最低級別的記錄,如設置最低級別為Info,則低於Info的級別,都不能記錄

code

測試結果

3.利用Filter過濾級別

除此之外,還能利用filter級別過濾,來設置將不同級別記錄到相應文件,如將INFO級別信息記錄到INFO文件中,將Error級別信息記錄到Error文件中。

配置文件

后台代碼

static void Main(string[] args)
        {
            //Log4net幾種提錯類型
            //創建日志記錄組件
            ILog  iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
            try
            {
                iLog.Debug("Debug", new Exception("Debug"));
                iLog.Info("Info", new Exception("Info"));
                iLog.Warn("Warn", new Exception("Warn"));
                iLog.Error("Error", new Exception("Error"));
                iLog.Fatal("Fatal", new Exception("Fatal"));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

測試結果

(二)級別繼承

級別繼承很簡單,歸結為一句話:若本事設置了級別,則用自己的級別,若沒設置級別,則繼承離自己最近的級別。

例子1

例子2

 例子3

 例子4

(三)日志輸出形式

1.輸出文件形式歸納

2.項目中常用的輸出形式

3.代碼操作

3.1.在Root中定義日志輸出媒介

<root>
      <level value="ALL" />
      <!--定義日志的輸出媒介,如下定義四種方式-->
      <!--文件形式記錄日志-->
      <appender-ref ref="LogFileInfoAppender" />
      <!--<appender-ref ref="LogFileErrorAppender" />-->
      <!--控制台顯示日志-->
      <appender-ref ref="ConsoleAppender" />
      <!--Windows事件日志-->
      <appender-ref ref="EventLogAppender" />
       <!--數據庫日志-->
      <appender-ref ref="AdoNetAppender_Oracle" />
</root>

3.2.配置具體的媒介,如下以文件形式為例

 <!--定義輸出到文件中-->
    <appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender">
      <!--定義文件存放位置-->
      <file value="E:/Log/log4netInfoLog.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd-HH:mm:ss" />
      <!---定義布局模板-->
      <layout type="log4net.Layout.PatternLayout">
        <!--每條日志末尾的文字說明-->
        <footer value="by Alan_beijing" />
        <!--輸出格式-->
        <!--樣例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優先級:%priority;%newline
                            日志級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" />
      </layout>
    </appender>

 3.3.后台代碼

class Program
    {
        static void Main(string[] args)
        {
            //Log4net幾種提錯類型
            //創建日志記錄組件
            ILog  iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
            try
            {
                iLog.Debug("Debug", new Exception("Debug"));
                iLog.Info("Info", new Exception("Info"));
                iLog.Warn("Warn", new Exception("Warn"));
                iLog.Error("Error", new Exception("Error"));
                iLog.Fatal("Fatal", new Exception("Fatal"));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }

3.4.測試結果

(四)定義日志輸出格式

1.常用輸出格式歸納

 

2.code及測試結果

 

三   代碼實例

 本示例是基於VS2017控制條程序寫的。

1.后台

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using log4net;
using System.Reflection;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Log4netDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //Log4net幾種提錯類型
            //創建日志記錄組件
            ILog  iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
            try
            {
                iLog.Debug("Debug", new Exception("Debug"));
                iLog.Info("Info", new Exception("Info"));
                iLog.Warn("Warn", new Exception("Warn"));
                iLog.Error("Error", new Exception("Error"));
                iLog.Fatal("Fatal", new Exception("Fatal"));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}

2.配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--聲明自定義節點-->
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <appSettings>
  </appSettings>
  <log4net>
    <root>
      <!--<level value="Info" />-->
      <level value="ALL" />
      <!--定義日志的輸出媒介,如下定義四種方式-->
      <!--文件形式記錄日志-->
      <!--<appender-ref ref="LogFile_MinLevel_Info" />-->
      <appender-ref ref="LogFileInfoAppender" />
      <appender-ref ref="LogFileErrorAppender" />
      <!--控制台顯示日志-->
      <!--<appender-ref ref="ConsoleAppender" />-->
      <!--Windows事件日志-->
      <!--<appender-ref ref="EventLogAppender" />-->
       <!--數據庫日志-->
      <!--<appender-ref ref="AdoNetAppender_Oracle" />-->
    </root>
    <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低)-->
    <logger name="log4netLevel">
      <!--<level value="ALL" />
      <level value="DEBUG" />-->
      <!--<level value="INFO" />-->
      <!--<level value="WARN" />
      <level value="ERROR" />-->
      <!--<level value="FATAL" />
      <level value="OFF" />-->
    </logger>
    <!--定義輸出到文件中-->
    <!--<appender name="LogFile_MinLevel_Info" type="log4net.Appender.FileAppender">-->
    <appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender">
      <!--定義文件存放位置-->
      <file value="E:/Log/log4netLogFile_Info.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd-HH:mm:ss" />
      <!---定義布局模板-->
      <layout type="log4net.Layout.PatternLayout">
        <!--每條日志末尾的文字說明-->
        <footer value="by Alan_beijing" />
        <!--輸出格式-->
        <!--樣例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優先級:%priority;%newline
                            日志級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Info" />
      </filter>
    </appender>
    <appender name="LogFileErrorAppender" type="log4net.Appender.FileAppender">
      <!--定義文件存放位置-->
      <file value="E:/Log/llog4netLogFile_Error.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd-HH:mm:ss" />
      <!--最大文件大小-->
      <maximumFileSize value="10MB" />
      <staticLogFileName value="false"/>
      <!---定義布局模板-->
      <layout type="log4net.Layout.PatternLayout">
        <!--每條日志末尾的文字說明-->
        <footer value="by Alan_beijing" />
        <!--輸出格式-->
        <!--樣例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優先級:%priority;%newline
                            日志級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" />
      </layout>
       
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Error" />
        <param name="LevelMax" value="Error" />
      </filter>
    </appender>
    <!--定義輸出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定義輸出到windows事件中-->
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定義輸出到數據庫中,這里舉例輸出到Access數據庫中,數據庫為C盤的log4net.mdb-->
    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
      <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
      <!--定義各個參數-->
      <parameter>
        <parameterName value="@logDate" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logLevel" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>
  </log4net>

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

四  推薦鏈接

【01】http://logging.apache.org/log4net/

五  服務區

有喜歡的朋友,可以看一下,不喜歡的的朋友,勿噴,謝謝!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM