黑馬程序員—關於C#系統日誌的寫法(2)—強大的Log4Net類

----------------------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

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