log4net是.Net下一個非常優秀的開源日志記錄元件。log4net記錄日志的功能非常強大。它可以将日志分不同的等級,以不同的格式,輸出到不同的媒介。Java平台下,它還有一個姐妹元件——log4j。
下載下傳位址:
http://logging.apache.org/log4net/download.html(一)主要組成
Appenders(輸出源)、
Filters(過濾器)、
Layouts(布局)、
Loggers(日志類别)和Object Renders(渲染器)。
(二)Appenders(輸出源)
用來定義日志的輸出方式,其中包括:
·AdoNetAppender 将日志記錄到資料庫中。可以采用SQL和存儲過程兩種方式。
·AnsiColorTerminalAppender 将日志高亮輸出到ANSI終端。
·AspNetTraceAppender 能用asp.net中Trace的方式檢視記錄的日志。
·BufferingForwardingAppender 在輸出到子Appenders之前先緩存日志事件。
·ConsoleAppender 将日志輸出到應用程式控制台。
·EventLogAppender 将日志寫到Windows Event Log。
·FileAppender 将日志輸出到檔案。
·ForwardingAppender 發送日志事件到子Appenders。
·LocalSyslogAppender 将日志寫到local syslog service (僅用于UNIX環境下)。
·MemoryAppender 将日志存到記憶體緩沖區。
·NetSendAppender 将日志輸出到Windows Messenger service.這些日志資訊将在使用者終端的對話框中顯示。
·OutputDebugStringAppender 将日志輸出到Debuger,如果程式沒有Debuger,就輸出到系統Debuger。如果系統Debuger也不可用,将忽略消息。
·RemoteSyslogAppender 通過UDP網絡協定将日志寫到Remote syslog service。
·RemotingAppender 通過.NET Remoting将日志寫到遠端接收端。
·RollingFileAppender 将日志以復原檔案的形式寫到檔案中。
·SmtpAppender 将日志寫到郵件中。
·SmtpPickupDirAppender 将消息以檔案的方式放入一個目錄中,像IIS SMTP agent這樣的SMTP代理就可以閱讀或發送它們。
·TelnetAppender 用戶端通過Telnet來接受日志事件。
·TraceAppender 将日志寫到.NET trace 系統。
·UdpAppender 将日志以無連接配接UDP資料報的形式送到遠端宿主或用UdpClient的形式廣播。
(三)Filter(過濾器)
用來過濾輸出源輸出的内容,其中包括:
·DenyAllFilter 阻止所有的日志事件被記錄
·LevelMatchFilter 隻有指定等級的日志事件才被記錄
·LevelRangeFilter 日志等級在指定範圍内的事件才被記錄
·LoggerMatchFilter Logger名稱比對,才記錄
·PropertyFilter 消息比對指定的屬性值時才被記錄
·StringMathFilter 消息比對指定的字元串才被記錄
(四)Layout(布局)
用來控制輸出源輸出内容的輸出格式(一個輸出源隻帶有一個布局)
最常用的Layout應該是使用者自定義格式的PatternLayout,其次是SimpleLayout和ExceptionLayout。然後還有4個Layout,其中有兩個是輸出Xml的Layout,但是中文會有問題。
ExceptionLayout需要給Logger的方法傳入Exception對象作為參數才起作用,否則就什麼也不輸出。輸出的時候會包含Message和Trace
Conversion Pattern Name | Effect |
a | 等價于appdomain |
appdomain | 引發日志事件的應用程式域的友好名稱。(我在使用中一般是可執行檔案的名字。) |
c | 等價于 logger |
C | 等價于 type |
class | |
d | 等價于 date |
date | 發生日志事件的本地時間。 使用 %utcdate 輸出UTC時間。date後面還可以跟一個日期格式,用大括号括起來。例如:%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{user} 輸出user屬性。屬性是由loggers或appenders添加到時間中的。 有一個預設的屬性"log4net:HostName"總是會有。 %property将輸出是以的屬性 。 (我除了知道可以用它獲得主機名外,還不知道怎麼用。) |
r | 等價于 timestamp |
t | 等價于 thread |
timestamp | 從程式啟動到事件發生所經過的毫秒數。 |
thread | 引發日志事件的線程,如果沒有線程名就使用線程号。 |
type | 引發日志請求的類的全名。. 可以使用精度控制符。例如: 類名是 "log4net.Layout.PatternLayout", 格式模型是 %type{1} 将輸出"PatternLayout"。(也是從右開始的。) |
u | 等價于 identity |
username | 目前使用者的WindowsIdentity。(類似:HostName\Username) |
utcdate | 發生日志事件的UTC時間。後面還可以跟一個日期格式,用大括号括起來。例如:%utcdate{HH:mm:ss,fff}或者%utcdate{dd MMM yyyy HH:mm:ss,fff}。如果utcdate後面什麼也不跟,将使用ISO8601 格式 。 |
w | 等價于 username |
x | 等價于 ndc |
X | 等價于 mdc |
% | %%輸出一個百分号 |
轉義字元的修飾符:
Format modifier | left justify | minimum width | maximum width | comment |
%20logger | false | 20 | none | 如果logger名不足20個字元,就在左邊補空格。 |
%-20logger | true | 如果logger名不足20個字元,就在右邊補空格。 | ||
%.30logger | NA | 30 | 超過30個字元将截斷。 | |
%20.30logger | logger名要在20到30之間,少了在左邊補空格,多了截斷。 | |||
%-20.30logger | logger名要在20到30之間,少了在右邊補空格,多了截斷。 |
(五) Loggers
直接和應用程式互動的元件。Logger隻是産生日志,然後由它引用的Appender記錄到指定的媒介,并由Layout控制輸出格式。
Logger提供了多種方式來記錄一個日志消息,也可以有多個Logger同時存在。每個執行個體化的Logger對象對被log4net作為命名實體(Named Entity)來維護。log4net使用繼承體系,也就是說假如存在兩個Logger,名字分别為a.b.c和a.b。那麼a.b就是a.b.c的祖先。每個Logger都繼承了它祖先的屬性。
級别 | 允許的方法 | Boolean屬性 | 優先級别 |
OFF | Highest | ||
FATAL | void Fatal(...); | bool IsFatalEnabled; | |
RROR | void Error(...); | bool IsErrorEnabled; | |
WARN | void Warn(...); | bool IsWarnEnabled; | |
INFO | void Info(...); | bool IsInfoEnabled; | |
DEBUG | void Debug(...); | bool IsDebugEnabled; | |
ALL | Lowest |
其中OFF表示停用是以日志記錄,ALL表示所有日志都可以記錄。
(六)Object Renders(渲染器)
按照使用者定義的标準輸出日志消息。Object Renders必須實作log4net.ObjectRenderer.IObjectRenerer接口。
部落格園大道至簡
http://www.cnblogs.com/jams742003/轉載請注明:部落格園