| 1. 一直在用log4net,從來沒有自己整理過。實踐出真知,只有自己整理過才能真正掌握。 2. log4net,應該讀logfornet,以前一直說log4,log4............ |
安裝
NuGet:

AssemblyInfo.cs :
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
配置
log4net.config
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="DebugRollingFileAppender" />
<appender-ref ref="InfoRollingFileAppender" />
<appender-ref ref="WarnRollingFileAppender" />
<appender-ref ref="ErrorRollingFileAppender" />
</root>
<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Debug/" />
<appendToFile value="true" />
<immediateFlush value="true" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH".log"" />
<MaximumFileSize value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} [%t] %c :%newline %m%n %newline " />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Info/" />
<appendToFile value="true" />
<immediateFlush value="true" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH".log"" />
<MaximumFileSize value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Warn/" />
<appendToFile value="true" />
<immediateFlush value="true" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH".log"" />
<MaximumFileSize value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="WARN" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Error/" />
<appendToFile value="true" />
<immediateFlush value="true" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH".log"" />
<MaximumFileSize value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
</log4net>
客戶端
private ILog _log = log4net.LogManager.GetLogger("LogTestController"); public ActionResult Index() { _log.Info("Info"); _log.Error("Error"); _log.Debug("Debug"); _log.Warn("Warn"); return View(); }
root
| 1.root元素沒有屬性,所有logger默認繼承它,root是必須配置的。 2.level元素:只有在這個級別或之上的事件才會被記錄 【OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL 】 3.appender-ref元素:指定一個或多個appender |
appender
| 1.定義日志的輸出方式,只能作為 log4net 的子元素。name屬性必須唯一,type屬性必須指定。 【一般寫文件日志用log4net.Appender.RollingFileAppender,可以根據日期格式或者文件大小來決定是否新建一個log.txt】 2.file元素:指定日志路徑。 3.appendToFile元素:是否支持分割文件。 4.rollingStyle元素:【Size:按日志大小,Date:日期格式分割】。 5.datePattern元素:日期格式。 6.MaximumFileSize元素:最小日志文件大小。 7.layout元素:日志輸出格式。【log4net.Layout.PatternLayout】。 8.filter元素:指定級別的日志輸出【LevelMatchFilter】 或者指定一個范圍級別的日志輸出【LevelRangeFilter】 |
PatterLayout的格式化字符串:
| Conversion Pattern Name | Effect |
|---|---|
| a | 等價於appdomain |
| appdomain | 引發日志事件的應用程序域的友好名稱。(我在使用中一般是可執行文件的名字。) |
| c | 等價於 logger |
| C | 等價於 type |
| class | 等價於 type |
| d | 等價於 date |
| date | 發生日志事件的本地時間。 使用 DE<%utcdate 輸出UTC時間。date后面還可以跟一個日期格式,用大括號括起來。DE<例如:%date{HH:mm:ss,fff}或者%date{dd MMM yyyy HH:mm:ss,fff}。如果date后面什么也不跟,將使用ISO8601 格式 。 日期格式和.Net中DateTime類的ToString方法中使用的格式是一樣。 另外log4net還有3個自己的格式Formatter。 它們是 "ABSOLUTE", "DATE"和"ISO8601"分別代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。例如: %date{ISO8601}或%date{ABSOLUTE}。 它們的性能要好於ToString。 |
| exception | 異常信息 日志事件中必須存了一個異常對象,如果日志事件不包含沒有異常對象,將什么也不輸出。異常輸出完畢后會跟一個換行。一般會在輸出異常前加一個換行,並將異常放在最后。 |
| F | 等價於 file |
| file | 發生日志請求的源代碼文件的名字。 警告:只在調試的時候有效。調用本地信息會影響性能。 |
| identity | 當前活動用戶的名字(Principal.Identity.Name). 警告:會影響性能。(我測試的時候%identity返回都是空的。) |
| l | 等價於 location |
| L | 等價於 line |
| location | 引發日志事件的方法(包括命名空間和類名),以及所在的源文件和行號。 警告:會影響性能。沒有pdb文件的話,只有方法名,沒有源文件名和行號。 |
| level | 日志事件等級 |
| line | 引發日志事件的行號 警告:會影響性能。 |
| logger | 記錄日志事件的Logger對象的名字。 可以使用精度說明符控制Logger的名字的輸出層級,默認輸出全名。 注意,精度符的控制是從右開始的。例如:logger 名為 "a.b.c", 輸出模型為 %logger{2} ,將輸出"b.c"。 |
| m | 等價於 message |
| M | 等價於 method |
| message | 由應用程序提供給日志事件的消息。 |
| mdc | MDC (舊為:ThreadContext.Properties) 現在是事件屬性的一部分。 保留它是為了兼容性,它等價於 property。 |
| method | 發生日志請求的方法名(只有方法名而已)。 警告:會影響性能。 |
| n | 等價於 newline |
| newline | 換行符 |
| ndc | NDC (nested diagnostic context) |
| p | 等價於 level |
| P | 等價於 property |
| properties | 等價於 property |
| property | 輸出事件的特殊屬性。例如: %property{user} 輸出user屬性。屬性是由loggers或appenders添加到時間中的。 有一個默認的屬性"DE<log4net:HostName"總是會有。DE< %property將輸出所以的屬性 。 (我除了知道可以用它獲得主機名外,還不知道怎么用。) |
| r | 等價於 timestamp |
| t | 等價於 thread |
| timestamp | 從程序啟動到事件發生所經過的毫秒數。 |
| thread | 引發日志事件的線程,如果沒有線程名就使用線程號。 |
| type | 引發日志請求的類的全名。. 可以使用精度控制符。例如: 類名是 "log4net.Layout.PatternLayout", 格式模型是 %type{1} 將輸出"PatternLayout"。(也是從右開始的。) 警告:會影響性能。 |
| u | 等價於 identity |
| username | 當前用戶的WindowsIdentity。(類似:HostName\Username) 警告:會影響性能。 |
| utcdate | 發生日志事件的UTC時間。DE<后面還可以跟一個日期格式,用大括號括起來。DE<例如:%utcdate{HH:mm:ss,fff}或者%utcdate{dd MMM yyyy HH:mm:ss,fff}。如果utcdate后面什么也不跟,將使用ISO8601 格式 。 日期格式和.Net中DateTime類的ToString方法中使用的格式是一樣。 另外log4net還有3個自己的格式Formatter。 它們是 "ABSOLUTE", "DATE"和"ISO8601"分別代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。例如: %date{ISO8601}或%date{ABSOLUTE}。 它們的性能要好於ToString。 |
| w | 等價於 username |
| x | 等價於 ndc |
| X | 等價於 mdc |
| % | %%輸出一個百分號 |
參考文檔:
http://peibing211.blog.163.com/blog/static/37116360200992811595469/
| 本文博客園地址:http://www.cnblogs.com/struggle999/p/7111436.html |
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載,但是未經作者本人同意,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。
