log4net示例1-最簡單的按日期分類保存日誌Console程序

目標:

      通過使用Log4net框架,創建按日期分類輸出日誌在文本文件的示例程序。

需求:

      1 使用log4net框架提供的日誌功能,進行系統的日誌管理。

      2 每一天的日誌用一個對應的日誌文本去存儲。(日誌文本名稱按日期進行區別)

需求分析:

       1 整備log4net.dll組件庫  

       2 由於使用的是回滾文件記錄日誌的方式,所以Appender選擇:RollingFileAppender.

 回滾形式:日期。

         日期格式初步定爲:yyyyMMdd-HHmmm

具體實施:

     (1)創建一個控制檯c#應用程序

      (2)添加log4net.dll引用

      (3)在項目中添加一個文本文件,文件擴展名改爲:log.set,注意:要將此文件的屬性設置爲:如有較新的則複製

  文件的內容爲:

<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">
  <root xmlns="">
    <level value="ALL" />
    <appender-ref ref="RollingLogFileAppender" />
  </root>
  <appender xmlns="" name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="log\\Log_"/>
    <param name="AppendToFile" value="true"/>
    <param name="StaticLogFileName" value="false"/>
    <param name="DatePattern" value="yyyyMMdd&quot;.log&quot;"/>
    <param name="RollingStyle" value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>    <!--關於這裏參數設置-->
    </layout>
  </appender>
</log4net>

(4)在項目的AssembleInfo.cs文件中添加:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log.set", Watch = true)]

        (5)編碼

               a. 在你的Program文件中添加:using:log4net

               b.在你的Main函數中拷貝下列代碼

            ILog log = log4net.LogManager.GetLogger(typeof(Program)); 
            Random random = new Random();
            for (int i = 0; i < 2; i++)
            {
                //記錄錯誤日誌 
                if (log.IsErrorEnabled)
                    log.Debug("你引起了一個錯誤,錯誤ID爲:"+random.Next().ToString());


                //記錄嚴重錯誤  
                if(log.IsFatalEnabled)
                    log.Fatal("你引發了一個總結者錯誤,可能導致系統終止,ID爲:"+random.Next().ToString()); 
                //記錄一般信息 
                if (log.IsInfoEnabled)
                    log.Info("你計劃記錄一個信息,id爲:"+random.Next().ToString());  
                //記錄調試信息  
                if (log.IsDebugEnabled)
                    log.Debug("調試信息,調試ID爲:" + random.Next().ToString());
                //記錄警告信息 
                if (log.IsWarnEnabled)
                {
                    log.Warn("警告:警告ID爲:" + random.Next().ToString());
                }
            }

        (6)測試,隔一天運行一次你的控制檯應用程序。假設我昨天運行了一次,今天運行了一次。那麼在程序的bin\debug目錄下就會出現一個log文件夾,文件夾中會出現兩個文本文件“Log_20120427.log” 和“Log_20120428”。 打開其中一個文件就可以看到日誌記錄。

 很想把示例程序上傳,無賴csdn太不好使了。後邊會提供示例下載鏈接

         (7)下面是幾種常用的回滾日誌存儲方式,

         (蒐集)

RollingFileAppender主要是基於FileAppender構建的,很多屬性方法都是繼承於FileAppender,所以在選項設置上,也有許多是相同的.

下面的例子使日誌文件名爲log.txt,日誌文件名是以文件大小進行變換的,如果舊日誌文件大小到100KB時,就會變換文件名爲log.txt.1,log.txt.2,log.txt.3...,一直到10爲止

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">   
        <!--日誌文件名--> 
    <file value="log.txt"/> 
    <!--是否在文件中追加--> 
    <appendToFile value="true"/> 
    <!--按照文件的大小進行變換日誌文件--> 
    <rollingStyle value="Size"/> 
    <!--最大變換數量--> 
    <maxSizeRollBackups value="10"/> 
    <!--最大文件大小--> 
    <maximumFileSize value="100KB"/> 
    <!--日誌文件名是否爲靜態--> 
    <staticLogFileName value="true"/> 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> 
    </layout> 
</appender>
下面的例子以時間週期變換日誌文件名,每分鐘都改變日誌的文件名,日誌文件名爲logfileyyyyMMdd-HHmm,這裏補充說明下,如果要在這個文件名後面加上.log後綴,必須使用轉義字符,比如<datePattern value="yyyyMMdd-HHmm&quot;.log&quot;" />

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
        <!--日誌文件名開頭--> 
    <file value="logfile" /> 
    <!--是否追加到文件--> 
    <appendToFile value="true" /> 
    <!--變換的形式爲日期--> 
    <rollingStyle value="Date" /> 
    <!--日期的格式--> 
    <datePattern value="yyyyMMdd-HHmm" /> 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender>
下面的例子綜合使用使用日期和文件大小變換日誌文件名。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <!--日誌文件名開頭--> 
    <file value="logfile" /> 
    <!--是否追加到文件--> 
    <appendToFile value="true" /> 
    <!--混合使用日期和文件大小變換日誌文件名--> 
    <rollingStyle value="Composite" /> 
    <!--日期的格式--> 
    <datePattern value="yyyyMMdd" /> 
    <!--最大變換數量--> 
    <maxSizeRollBackups value="10" /> 
    <!--最大文件大小--> 
    <maximumFileSize value="1MB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender>
下面例子是在每次程序運行的時候,都會備份原先的日誌文件,當運行的日誌文件大於50G的時候纔會變換日誌文件名。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <!--日誌文件名--> 
    <file value="logfile.txt" /> 
    <!--不追加到原文件--> 
    <appendToFile value="false" /> 
    <!--以日誌文件大小變換文件名--> 
    <rollingStyle value="Size" /> 
    <!--最大變換數量,-1爲不限制--> 
    <maxSizeRollBackups value="-1" /> 
    <!--最大文件大小--> 
    <maximumFileSize value="50GB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender>
下面是RollingFileAppender類中的部分Public Instance Properties(公共屬性)的說明,沒有全部測試,難免謬誤,如果你知道,請不要吝嗇告寫。
CountDirection : 定義當前文件是最小編號的文件還是最大編號的文件。默認爲-1,總是以更小的編號。
datePattern : DateFormatter日期格式,string類型。
Encoding : 就是文件的編碼,默認爲Default,就是程序本身的編碼了。
FilterHead : 分割符頭部。
ImmediateFlush : 表示是否立即輸出到文件,布爾型的。
LockingModel : 文件鎖類型,RollingFileAppender本身不是線程安全的,如果在程序中沒有進行線程安全的限制,可以在這裏進行配置,確保寫入時的安全。有兩中類型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 設置本Appander的名稱。
SecurityContext : 比較少應用,對日誌進行加密只類的,使用SecurityContextProvider轉換。(對日誌的保密要求比較高的時候應該可以應用上吧,Log4考慮的還挺周全)
Threshold : 設置內容級別的,比如:DEBUG,INFO等等。

RollingFileAppender主要是基於FileAppender構建的,很多屬性方法都是繼承於FileAppender,所以在選項設置上,也有許多是相同的.

下面的例子使日誌文件名爲log.txt,日誌文件名是以文件大小進行變換的,如果舊日誌文件大小到100KB時,就會變換文件名爲log.txt.1,log.txt.2,log.txt.3...,一直到10爲止

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">  
        <!--日誌文件名-->
    <file value="log.txt"/>
    <!--是否在文件中追加-->
    <appendToFile value="true"/>
    <!--按照文件的大小進行變換日誌文件-->
    <rollingStyle value="Size"/>
    <!--最大變換數量-->
    <maxSizeRollBackups value="10"/>
    <!--最大文件大小-->
    <maximumFileSize value="100KB"/>
    <!--日誌文件名是否爲靜態-->
    <staticLogFileName value="true"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
    </layout>
</appender>
下面的例子以時間週期變換日誌文件名,每分鐘都改變日誌的文件名,日誌文件名爲logfileyyyyMMdd-HHmm,這裏補充說明下,如果要在這個文件名後面加上.log後綴,必須使用轉義字符,比如<datePattern value="yyyyMMdd-HHmm&quot;.log&quot;" />

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <!--日誌文件名開頭-->
    <file value="logfile" />
    <!--是否追加到文件-->
    <appendToFile value="true" />
    <!--變換的形式爲日期-->
    <rollingStyle value="Date" />
    <!--日期的格式-->
    <datePattern value="yyyyMMdd-HHmm" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
下面的例子綜合使用使用日期和文件大小變換日誌文件名。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!--日誌文件名開頭-->
    <file value="logfile" />
    <!--是否追加到文件-->
    <appendToFile value="true" />
    <!--混合使用日期和文件大小變換日誌文件名-->
    <rollingStyle value="Composite" />
    <!--日期的格式-->
    <datePattern value="yyyyMMdd" />
    <!--最大變換數量-->
    <maxSizeRollBackups value="10" />
    <!--最大文件大小-->
    <maximumFileSize value="1MB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
下面例子是在每次程序運行的時候,都會備份原先的日誌文件,當運行的日誌文件大於50G的時候纔會變換日誌文件名。

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!--日誌文件名-->
    <file value="logfile.txt" />
    <!--不追加到原文件-->
    <appendToFile value="false" />
    <!--以日誌文件大小變換文件名-->
    <rollingStyle value="Size" />
    <!--最大變換數量,-1爲不限制-->
    <maxSizeRollBackups value="-1" />
    <!--最大文件大小-->
    <maximumFileSize value="50GB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
下面是RollingFileAppender類中的部分Public Instance Properties(公共屬性)的說明,沒有全部測試,難免謬誤,如果你知道,請不要吝嗇告寫。
CountDirection : 定義當前文件是最小編號的文件還是最大編號的文件。默認爲-1,總是以更小的編號。
datePattern : DateFormatter日期格式,string類型。
Encoding : 就是文件的編碼,默認爲Default,就是程序本身的編碼了。
FilterHead : 分割符頭部。
ImmediateFlush : 表示是否立即輸出到文件,布爾型的。
LockingModel : 文件鎖類型,RollingFileAppender本身不是線程安全的,如果在程序中沒有進行線程安全的限制,可以在這裏進行配置,確保寫入時的安全。有兩中類型:FileAppender.ExclusiveLock 和 FileAppender.MinimalLock
Name : 設置本Appander的名稱。
SecurityContext : 比較少應用,對日誌進行加密只類的,使用SecurityContextProvider轉換。(對日誌的保密要求比較高的時候應該可以應用上吧,Log4考慮的還挺周全)
Threshold : 設置內容級別的,比如:DEBUG,INFO等等。


本想把示例程序上傳,無賴csdn太不好用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章