Log4Net配置以及使用


      跟蹤程序代碼,及時發現程序的運行狀態,是每個成熟的軟件所必不可少的一個環節,網站發布到真實的環境之后,對於程序的運行狀態,我們並不能想開發環境那也,點擊調試。日志記錄顯示就尤為重要,在.NET中記錄日志的方法有很多種,常用的也就是Log4net,NLog。這篇文章主要記錄Log4net的使用情況,NLog的使用放在后續章節介紹。(PS:其他同仁也介紹了很多關於Log4net的使用,我再他們的基礎上梳理了一下使用方式,按自己的理解寫下了這篇內容,如果有部分內容雷同,還望原博主理解)

      Log4net是針對.Net程序開發的一版日志記錄的DLL組件,使用者只需要配置Config文件,點擊添加引用DLL。使用起來也簡單方便。Log4Net官網地址有開源的項目,我們開源獲取源碼,分析代碼,這里主要針對使用方面進行介紹:Config文件的配置、API部分代碼完善;Log4Net下載DLL

  Log4net的日志等級從低到高依次分為:ALL ---> DEBUG ---> INFO ---> WARN ---> ERROR ---> FATAL ---> OFF

     Log4net中Config配置介紹:

  下面是一個完善的config的配置,將日志信息配置到文本文件中;

<?xml version="1.0"?>
<configuration>  
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <!--日志-->
  <log4net>
    <!--<root>
      <level value="ALL"/>
      <appender-ref ref="ErrorAppender"/>
      <appender-ref ref="InfoAppender"/>
    </root>-->
    <logger name="logerror">
      <level value="ERROR" />
      <appender-ref ref="ErrorAppender" />
    </logger>
    <logger name="loginfo">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="App_Log\\Error\\" />
      <param name="AppendToFile" value="true" />
      <param name="StaticLogFileName" value="false"/>
      <param name="MaximumFileSize" value="10MB"/>
      <param name="Threshold" value="ALL"></param>
      <param name="DatePattern" value="yyyyMM&quot;\\log_&quot;yyyyMMdd&quot;.log&quot;"/>
      <param name="RollingStyle" value="Composite"/>
      <param name="CountDirection" value="1"/>      
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%-5p %d [%c] %m%n" />
      </layout>
    </appender>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="App_Log\\Info\\" />
      <param name="AppendToFile" value="true" />
      <param name="StaticLogFileName" value="false"/>
      <param name="MaximumFileSize" value="10MB"/>
      <param name="Threshold" value="ALL"></param>
      <datePattern value="yyyyMMdd" />
      <param name="RollingStyle" value="Date"/>
      <param name="CountDirection" value="1"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="Header" value="-------------start-----------&#13;&#10;"/>        
        <param name="ConversionPattern" value="%-5p %d [%c] %m%n" />        
      </layout>
    </appender>
  </log4net>
</configuration>

 config配置參數說明如下:

 

參數名

描述

filter

可以有0或多個filter,具體配置在下面的Filter項說明。

layout

可以有0或者說1layout,當沒有layout時,沒有輸出。具體配置在下面的layout項說明

param

Param有多個可以進行配置,常用的:

名稱

描述

File

文件路徑,如果RollingStyleCompositeDate,則這里設置為目錄,文件名在DatePattern里設置,其他則這里要有文件名。已經擴展支持虛擬目錄

RollingStyle

創建新文件的方式,可選為Size(按文件大小),Date(按日期),Once(每啟動一次創建一個文件),Composite(按日期及文件大小),默認為Composite

DatePattern

RollingStyleCompositeDate這里設置文件名格式

StaticLogFileName

True/false,默認為true。為true時,RollingStylerdate值將無效。且為true時,需要在file里指定文件名,所有日志都會記錄在這個文件里。

MaximumFileSize

RollingStyleCompositeSize這里設置最大文件大小(可以KBMBGB為單位,默認為字節)

CountDirection

默認值為-1。當文件超過MaximumFileSize的大小時,如果要創建新的文件來存儲日志,會根據CountDirection的值來重命名文件。大於-1的值時,file里指定的文件名會依次加上.0,.1,.2遞增。當等於或小於-1時,創建依賴於MaxSizeRollBackups參數值,創建備份日志數。

MaxSizeRollBackups

備份日志數目,默認為0。在CountDirection為負數時有效。

Threshold

起始日志級別,取值為下面文章討論的預定義日志級別。低於此級別的日志不會被記錄。

AppendToFile

True/false,默認為true。當文件存在時,是否在原文件上追加內容。

例如:

<param name="File" value="UpLoads\\Log\\"/>

    <param name="MaximumFileSize" value="3000"/>

    <param name="StaticLogFileName" value="false"/>

    <param name="Threshold" value="Debug"></param>

    <param name="DatePattern" value="yyyyMM&quot;\\#{ServerHostName}-&quot;yyyyMMdd&quot;.log&quot;"/>

    <param name="RollingStyle" value="Date"/>

ConversionPattern中的部分標識符的意義介紹如下:

<!--==================layout節點的配置說明start======================-->
%m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息  
%n(new line):換 行                                                        
%d(datetime):輸出當前語句運行的時刻
%r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數 
%t(thread id):當前語句所在的線程ID 
%p(priority): 日志的當前優先級別,即DEBUG、INFO、WARN…等  
%c(class):當前日志對象的名稱,例如: 
模式字符串為:%-10c -%m%n  
代碼為:   
ILog log=LogManager.GetLogger(“Exam.Log”);  
log.Debug(“Hello”); 
則輸出為下面的形式:
Exam.Log       - Hello  
%L:輸出語句所在的行 號
%F:輸出語句所在的文件名 
%-數字:表示該項的最小長度,如果不夠,則用空格填充
<!--==================layout節點的配置說明end======================-->

 

 

C#代碼使用介紹

添加代碼如下:

    /// <summary>
    /// 使用LOG4NET記錄日志的功能,在WEB.CONFIG里要配置相應的節點
    /// </summary>
    public class Log4NetHelper
    {
        //log4net日志專用
        public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
        public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");

        public static void SetConfig()
        {
            log4net.Config.XmlConfigurator.Configure();
        }

        public static void SetConfig(FileInfo configFile)
        {
            log4net.Config.XmlConfigurator.Configure(configFile);
        }
        /// <summary>
        /// 普通的文件記錄日志
        /// </summary>
        /// <param name="info"></param>
        public static void WriteLog(string info)
        {
            if (loginfo.IsInfoEnabled)
            {
                loginfo.Info(info);
            }
        }
        /// <summary>
        /// 錯誤日志
        /// </summary>
        /// <param name="info"></param>
        /// <param name="se"></param>
        public static void WriteLog(string info, Exception se)
        {
            if (logerror.IsErrorEnabled)
            {
                logerror.Error(info, se);
            }
        }
    }

主程序中記錄Log的使用方式:

static void Main(string[] args)
        {
            Log4NetHelper.SetConfig();       
            //ILog lgclient = LogManager.GetLogger("loginfo");
            //lgclient.Info("Info-message");

            //lgclient.Debug("Debug-message");

            //lgclient.Warn("Warn-message");

            LogHelper.WriteLog("MyWorkLogInfo");
            Console.ReadLine();
        }

 

 


免責聲明!

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



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