C#使用日志組件log4net_第1頁
C#使用日志組件log4net_第2頁
C#使用日志組件log4net_第3頁
C#使用日志組件log4net_第4頁
C#使用日志組件log4net_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第C#使用日志組件log4net目錄一、概述1、下載與版本2、Log4net的結構3、日志的級別二、建立log4net配置文件1、配置文件2、Logger3、Appender4、PatternLayout中的轉換模式三、定義配置文件1、在Winfrom中,在AssemblyInfo.cs中添加如下代碼:2、在中,在Global.asax文件中的Application_Start方法中增加:四、調用log4net寫日志1、創(chuàng)建或獲取日志對象2、輸出日志信息五、更改Appender設置1、獲取root的Appender2、獲取指定Logger的Appender:不包括繼承的Appender3、更改Appender設置六、自定義appender1、定義myMemAppender類2、注冊Appender

一、概述

log4net庫是Apachelog4j框架在Microsoft.NET平臺的實現,是一個幫助程序員將日志信息輸出到各種目標(控制臺、文件、數據庫等)的工具。

1、下載與版本

Apachelog4net,最新版本log4net2.0.8

2、Log4net的結構

log4net有四種主要的組件,分別是Logger(記錄器),Repository(庫),Appender(附著器)以及Layout(布局)。

3、日志的級別

如果沒有定義LEVEL的值,則缺省為DEBUG。

OFF級別最高FATALRRORWARNINFODEBUG缺省ALL級別最低

比如:定義一個日志對象,設置級別為INFO,表示比INFO級別高(或相等)的日志將被記錄。即log.Info(XX)將記錄,log.Debug(**)不記錄

二、建立log4net配置文件

config/log4net.config文件:

log4net

root

levelvalue="INFO"/

appender-refref="RollingFileAppender"/

appender-refref="ColoredConsoleAppender"/

/root

loggername="MessageHandler"

levelvalue="ERROR"/

appender-refref="SmtpAppender"/

/logger

appendername="RollingFileAppender"type="log4net.Appender.RollingFileAppender"

filevalue="Log\pamsdc"/

thresholdvalue="INFO"/

appendToFilevalue="true"/

rollingStylevalue="Composite"/

datePatternvalue="yyyyMMdd"/

maxSizeRollBackupsvalue="100"/maxSizeRollBackups

layouttype="log4net.Layout.PatternLayout"

headervalue="[Header]"/

footervalue="[Footer]"/

conversionPatternvalue="%date[%thread]%-5level%logger[%ndc]%property{auth}-%message%newline"/

/layout

/appender

appendername="ColoredConsoleAppender"type="log4net.Appender.ColoredConsoleAppender"

mapping

levelvalue="WARN"/

foreColorvalue="White"/

backColorvalue="Red,HighIntensity"/

/mapping

layouttype="log4net.Layout.PatternLayout"

headervalue="[Header]"/

footervalue="[Footer]"/

conversionPatternvalue="%date[%thread]%-5level%logger[%ndc]%property{auth}-%message%newline"/

/layout

/appender

appendername="SmtpAppender"type="log4net.Appender.SmtpAppender,log4net"

tovalue=""/

fromvalue="GPEHZ-MIS@GoldPeak"/

subjectvalue="PAMSDC致命錯誤"/

smtpHostvalue="48"/

bufferSizevalue="32"/

lossyvalue="true"/

Authenticationvalue="Basic"/

Usernamevalue="GPEHZ-MIS@GoldPeak"/

Passwordvalue=""/

evaluatortype="log4net.Core.LevelEvaluator,log4net"

thresholdvalue="ERROR"/

/evaluator

layouttype="log4net.Layout.PatternLayout,log4net"

conversionPatternvalue="日期:%date線程:[%thread]級別:%-5level類:%logger[%ndc]%property{auth}-消息:%message%newline"/

/layout

/appender

/log4net

1、配置文件

配置信息一般放在單獨的配置文件中,也可以放在在程序的配置文件里,如app.config或web.config.或者任意文件中。

log4net框架會在相對于AppDomain.CurrentDomain.BaseDirectory屬性定義的目錄路徑下查找配置文件。

框架在配置文件里要查找的唯一標識是標簽。一個完整的配置文件的例子如下:

xmlversion="1.0"encoding="utf-8"

configuration

configSections

sectionname="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,

log4net-net-1.0"/

/configSections

log4net

/log4net

/configuration

2、Logger

Logger是應用程序需要交互的主要組件,它用來產生日志消息。產生的日志消息并不直接顯示,還要預先經過Layout的格式化處理后才會輸出。

Logger提供了多種方式來記錄一個日志消息,你可以在你的應用程序里創(chuàng)建多個Logger,每個實例化的Logger對象都被log4net框架作為命名實體(namedentity)來維護。這意味著為了重用Logger對象,你不必將它在不同的類或對象間傳遞,只需要用它的名字為參數調用就可以了。

log4net框架使用繼承體系,在框架的體系里所有的日志對象都是根日志(rootlogger)的后代。也就是說,如果有兩個logger,分別被定義為a.b.c和a.b,那么我們說a.b是a.b.c的祖先。每一個logger都繼承了祖先的屬性。這種缺省的繼承方式也可以通過顯式地設定標簽的additivity屬性為false而改變。

Log4net框架定義了一個ILog接口,所有的logger類都必須實現這個接口。如果你想實現一個自定義的logger,你必須首先實現這個接口。

Log4net框架定義了一個叫做LogManager的類,用來管理所有的logger對象。它有一個GetLogger()靜態(tài)方法,用我們提供的名字參數來檢索已經存在的Logger對象。如果框架里不存在該Logger對象,它也會為我們創(chuàng)建一個Logger對象。代碼如下所示:

log4net.ILoglog=log4net.LogManager.GetLogger("logger-name");

通常來說,我們會以類(class)的類型(type)為參數來調用GetLogger(),以便跟蹤我們正在進行日志記錄的類。

3、Appender

一個好的日志框架應該能夠產生多目的地的輸出。比如說輸出到控制臺或保存到一個日志文件。log4net能夠很好的滿足這些要求。它使用一個叫做Appender的組件來定義輸出介質。正如名字所示,這些組件把它們附加到Logger日志組件上并將輸出傳遞到輸出流中。你可以把多個Appender組件附加到一個日志對象上。Log4net框架提供了幾個Appender組件。

關于log4net提供的Appender組件的完整列表可以在log4net框架的幫助手冊中找到。有了這些現成的Appender組件,一般來說你沒有必要再自己編寫了。但是如果你愿意,可以從log4net.Appender.AppenderSkeleton類繼承。

log4net的各種Appender配置示例

/log4net/release/config-examples.html

輸出方式主要包括:

AdoNetAppender:將日志記錄到數據庫中。可以采用SQL和存儲過程兩種方式AspNetTraceAppender:能用ASP.NET中跟蹤的方式查看記錄的日志。BufferingForwardingAppender:在輸出到子Appenders之前先緩存日志事件。ColoredConsoleAppender:在終端的窗口寫下高亮度的日志事件。ConsoleAppender:將日志輸出到控制臺。EventLogAppender:將日志寫到Windows操作系統(tǒng)的日志中去。FileAppender:將日志寫到文件中。ForwardingAppender:用來為一個Appender指定一組約束。MemoryAppender:將日志存到內存緩沖區(qū)。NetSendAppender:將日志輸出到WindowsMessengerservice,這些日志信息將在用戶終端的對話框中顯示。OutputDebugStringAppender:配置該Appender以向OutputDebugStringAPI寫入日志。RemotingAppender:通過.NETRemoting將日志寫到遠程接收端。RollingFileAppender:將日志以回滾文件的形式寫到文件中。SmtpAppender:將日志寫到郵件中。SmtpPickupDirAppender:配置與SmtpAppender類似,但要把SmtpHost換為PickupDir。TraceAppender:將日志寫到.NETtrace系統(tǒng)。UdpAppender:將日志connectionlessUDPdatagrams的形式送到遠程宿主或以UdpClient的形式廣播。

4、PatternLayout中的轉換模式

%F/%file:輸出語句所在的文件名%U/%identity:用戶名%l/%location:調用者位置%L/%line:輸出語句所在的行號%M/%method:方法%C(class),%class,%type::類名%w/%username:WindowsIdentity%a/%appdomain:域%t/%thread:當前語句所在的線程ID%c(category),%logger::當前日志對象的名稱%p(priority),%level:日志的當前優(yōu)先級別,即DEBUG、INFO、WARN等%m/%message:輸出的日志消息,如ILog.Debug()輸出的一條消息%exception:異常%d,%date:輸出當前語句運行的時刻,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-ddHH:mm:ss},輸出2015-03-1014:53:28;也可以%d{ISO8601}輸出2015-03-1014:51:12,220,%d{DATE}輸出10Mar201514:51:51,318,%d{ABSOLUTE}輸出14:54:07,943,%d{HH:mm:ss,fff},%d{ddMMyyyyHH:mm:ss,fff},yyyy年份,MM月份,dd日期,HH小時小時24制,hh小時12小時制,mm分鐘,ss秒,fff毫秒(f為秒的精確位數,幾個f代表精確到小數點后幾位)%r/%timestamp:輸出程序從運行到執(zhí)行到當前語句時消耗的毫秒數%X/%mdc:輸出(mappeddiagnosticcontext)mdc上下文內容%x/%ndc:輸出(nesteddiagnosticcontext)ndc上下文內容%p/%Proerties{user}:呈現指定屬性%n(newline):換行%-數字:表示該項的最小長度,如果不夠,則用空格填充。%-10,表示最小長度為10,如果不夠,則用空格右側填充;%.10,表示最大長度為10;可以與%m等其他格式組合使用,示例%10m,%-10m,%10.10m,%-10.10m%%:輸出%

例如,轉換模式為%r[%t]%-5p%c-%m%n的PatternLayout將生成類似于以下內容的輸出:

176[main]INFOorg.foo.Bar-Locatednearestgasstation.

三、定義配置文件

當我們創(chuàng)建了上面的配置文件后,我們接下來需要把它和我們的應用聯系起來。缺省的,每個獨立的可執(zhí)行程序集都會定義它自己的配置。

log4net框架使用log4net.Config.XmlConfiguratorAttribute在程序集的級別上定義配置文件。

ConfigFile:指出了我們的配置文件的路徑及文件名,包括擴展名。ConfigFileExtension:如果我們對被編譯程序的程序集使用了不同的文件擴展名,那么我們需要定義這個屬性,缺省的,程序集的配置文件擴展名為config。Watch(Boolean屬性):log4net框架用這個屬性來確定是否需要在運行時監(jiān)視文件的改變。如果這個屬性為true,那么FileSystemWatcher將會被用來監(jiān)視文件的改變,重命名,刪除等事件。

1、在Winfrom中,在AssemblyInfo.cs中添加如下代碼:

[assembly:log4net.Config.XmlConfigurator(ConfigFile="log4net.config",Watch=true)]//關聯log4net.config文件

[assembly:log4net.Config.XmlConfigurator(ConfigFileExtension="log4net",Watch=true)]//關鍵到xxx.exe.log4net或xxx.dll.log4net,并監(jiān)測變化。

2、在中,在Global.asax文件中的Application_Start方法中增加:

log4net.Config.XmlConfigurator.Configure(newSystem.IO.FileInfo("log4net.config"));

log4net.Config.XmlConfigurator.ConfigureAndWatch(newFileInfo(Server.MapPath(@”Config.log4net.config”)))

四、調用log4net寫日志

1、創(chuàng)建或獲取日志對象

日志對象會使用在配置文件里定義的Logger的Name屬性。如果某個日志對象沒有事先在配置文件里定義,那么框架會根據繼承結構獲取祖先節(jié)點的屬性,最終的,會從根root日志獲取屬性。如下所示:

Log4net.ILoglog=Log4net.LogManager.GetLogger("MyLogger");

Log4net.ILoglog=Log4net.LogManager.GetLogger(typeof(_Default));

Log4net.ILoglog=Log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

2、輸出日志信息

if(log.IsDebugEnabled)

log.Debug("message");

if(log.IsInfoEnabled)

log.Info("message);

log.Logger.Repostory.Shutdown()//關閉日志

五、更改Appender設置

1、獲取root的Appender

log4net.Repository.Hierarchy.Hierarchyh=(log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository();

log4net.Appender.AppenderCollectionac=h.Root.Appenders;

2、獲取指定Logger的Appender:不包括繼承的Appender

log4net.ILoglogger=log4net.LogManager.GetLogger(typeof(_Defaut));

log4net.Appender.AppenderCollectionac=((log4net.Repository.Hierarchy.Logger)logger.Logger).Appenders;

3、更改Appender設置

for(inti=0;iac.Count;i++)

log4net.Appender.RollingFileAppenderrfa=ac[i]aslog4net.Appender.RollingFileAppender;

if(rfa!=null)

rfa.File="xxx.log";//程序運行時動態(tài)的設定log日志的文件名

rfa.Writer=newSystem.IO.StreamWriter(rfa.File,rfa.AppendToFile,rfa.Encoding);

}

六、自定義appender

日志保存于內存中,到一定閾值之后才將數據post到服務器,同時可配置服務端接受數據的地址

1、定義myMemAppender類

publicclassMyMemAppender:AppenderSkeleton

privateArrayListeventQueue;

publicstringRemoteAddress{get;set;}

publicintQueueSize{get;set;}

publicMyMemAppender():base()

eventQueue=newArrayList();

protectedoverridevoidAppend(log4net.Core.LoggingEventloggingEvent)

lock(eventQueue.SyncRoot)

eventQueue.Add(loggingEvent);

if(eventQueue.Count=QueueSize)

lock(eventQueue.SyncRoot)

SaveToServer();

eventQueue.Clear();

privatevoidSaveToServer()

lock(eventQueue.SyncRoot)

ListlogList=newList();

foreach(log4net.Core.LoggingEventevtineventQueue)

LogModelm=Newtonsoft.Json.JsonConvert.DeserializeObject(evt.RenderedMessage);//或者evt.MessageObjectasLogModel

logList.Add(m);

catch(Exceptionex)

Console.Write(ex.ToString());

continue;

//將logList序列化上傳至remoteAddress

virtualpublicLoggingEvent[]GetEvents()

lock(eventQueue.SyncRoot)

return(LoggingEvent[])eventQueue.ToArray(typeof(LoggingEvent));

}

2、注冊Appender

(1)root根目錄下追加

配置文件方式:

xmlversion="1.0"encoding="utf-8"

log4netdebug="true"

appendername="myMemAppender"type="LogSystem.Common.MyMemAppender"

paramname="QueueSize"value="10"/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論