----------------------Windows Phone 7手機開發、.Net培訓、期待與您交流! ----------------------
關於log4Net類的使用心得
————————巧妙的運用log4net類,來爲你的系統添加點睛之筆------————————————————
系統日誌,是現如今的系統之中必不可少的一項功能,它可以完美的記錄系統當前的運行狀況,以及錯誤報告,登錄人員所做的操作,並可以以文本流或者數據庫的方式存儲。
方便維護人員和開發人員的查看。
下面我來介紹下log4Net的用法:
1.首先我們需要在網站或者程序中的配置文件中配置好Log4Net的配置節(這裏以Web網站爲例):
在網站的web.config 配置文件中添加Log4Net的配置節:
<!-- ===============log4net add start2=============== -->
<log4net debug="false">
<!--以文件方式輸出並保存到d:\Application.log.txt-->
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="d:\Application.log.txt"/>
<param name="datePattern" value="MM-dd HH:mm"/>
<param name="AppendToFile" value="true"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
<!--以跟蹤方式 Asp.net trace方式查看-->
<appender name="HttpTraceAppender" type="log4net.Appender.ASPNetTraceAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
</appender>
<!--以流的方式輸出並保存至文本-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--輸出方式的一種:文本保存到"E:\DCLog\yyyy-MM\yyyy-MM-dd.LOG"中-->
<file value="E:\Log\"/>
<datePattern value="yyyy-MM/yyyy-MM-dd.LOG"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%-5level] %n -- %m%n"/>
</layout>
<!--輸出方式的另一種:文本保存到"D:\Log.txt"中
<param name="File" value="D:\Log.txt"/>
<param name="AppendToFile" value="true"/>
<param name="MaxSizeRollBackups" value="10"/>
<param name="MaximumFileSize" value="5MB"/>
<param name="RollingStyle" value="Size"/>
<param name="StaticLogFileName" value="true"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
-->
</appender>
<!--以數據庫的方式輸出,插入到SQL數據庫(此處以SQL SERVER爲例) -->
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="0" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="server=.;database=JD_Test;uid=sa;pwd=123;timeout=300;" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%t" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<logger name="MyADOAppender">
<level value="DEBUG" />
<appender-ref ref="ADONetAppender" />
</logger>
<logger name="MyFileAppender">
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender"/>
</logger>
<root>
<level value="ALL" />
</root>
<!--<root>
<level value="ALL"/>
value="日誌級別(OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL)"
<appender-ref ref="ADONetAppender"/>
ref="你所有的appender節點的name名稱"
</root>-->
</log4net>
<!-- ===============log4net add end2=============== -->
appender配置節的各種使用意義:
AspNetTraceAppender
<appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
這段配置可將日誌信息輸出到頁面的Trace上下文環境。如果日誌的級別低於WARN,會以System.Web.TraceContext.Write方法輸出;如果級別爲WARN或WARN以上則會以System.Web.TraceContext.Warn方法輸出
BufferingForwardingAppender
<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
<bufferSize value="5"/>
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<appender-ref ref="LogFileAppender" />
<appender-ref ref="AspNetTraceAppender" />
</appender>
BufferingForwardingAppender的主要作用是將輸出到指定類型(這裏是LogFileAppender)的Appender的日誌信息進行緩存。bufferSize屬性指定了緩存的數量,如果value爲5,那麼將在信息量達到6條的時候,把這些日誌批量輸出。appender-ref屬性指定了緩存的Appender類型,同root節點一樣,這裏可以指定多個。
FileAppender
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<param name="File" value="WebUtilClient.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
File指定了文件名稱,可以使用相對路徑,此時日誌文件的位置取決於項目的類型(如控制檯、Windows Forms、ASP.NET等);也可以使用絕對路徑;甚至可以使用環境變量,如<file value="${TMP}\log-file.txt" />。
AppendToFile指定是追加到還是覆蓋掉已有的日誌文件。
還可以添加如下屬性<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />來使用最小鎖定模型(minimal locking model),以允許多個進程可以寫入同一個文件。
這裏我只是去幾個樣例來講解作爲參考,其他很少用到的並未做講解。
更多的配置節信息,請參考這裏:http://logging.apache.org/log4net/release/config-examples.html#smtpappender
英文不難,可自己翻譯下。
2. 在程序中調用的時候要添加引用 using log4net; 這裏的log4net的dll自己事先要添加到網站的引用中來。
在程序中調用:
using log4net;
public class A
{
public void WriteExceptionLog(String messages)
{
//這裏是 事先準備好的一個實體類,用來存日誌信息的。
Text_LogInfo log = new Text_LogInfo ()
{
//其中一個屬性。
Messages = messages
};
//在寫日誌前,先要調用日誌接口,用來獲取web.config配置文件中的配置節
ILog log2 = LogManager.Exists("MyFileAppender");
log2.Warn(" 錯誤信息:" + log.Messages);
}
}
以上代碼是我以前做項目的時候寫的一段記錄錯誤日誌的方法,並寫了詳細的註釋,方便大家理解。
----------------------Windows Phone 7手機開發、.Net培訓、期待與您交流! ----------------------
詳細請查看:http://edu.csdn.net/heima