Log4net - 規則簡介

来源:http://www.cnblogs.com/elvinle/archive/2017/01/06/6251072.html
-Advertisement-
Play Games

項目過程中, 不可避免的, 需要使用到日誌功能. 在我接觸過的項目中, 也有自己弄一套日誌的, 但是更多的, 還是使用別人成熟的dll, 比如log4. log4相關的文檔, 真是非常的多, 也非常的全, 但是本著溫故而知新的目的, 還是想把這個過一遍. 先放一個小Demo在上面 主要有五個組成部分 ...


項目過程中, 不可避免的, 需要使用到日誌功能. 在我接觸過的項目中, 也有自己弄一套日誌的, 但是更多的, 還是使用別人成熟的dll, 比如log4. 

log4相關的文檔, 真是非常的多, 也非常的全, 但是本著溫故而知新的目的, 還是想把這個過一遍. 

先放一個小Demo在上面

<appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Logs\trace.txt" />
  <MaxSizeRollBackups value="20" />
  <StaticLogFileName value="false" />
  <DatePattern value="yyyyMMdd'.txt'" />
  <RollingStyle value="Size" />
  <MaximumFileSize  value="10MB"/>
  <appendToFile value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" />
    <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" />
    <ConversionPattern value="%d [%t] %-5p %c - %m%n" />
  </layout>
  <filter type="log4net.Filter.LevelRangeFilter,log4net">
    <levelMin value="DEBUG" />
    <levelMax value="INFO" />
  </filter>
</appender>

主要有五個組成部分: Appenders, Filters, Layouts, Loggers, Object Renders

 1. Appenders

用來定義日誌的輸出方式. 可以通過配置Filters和Layout來實現日誌的過濾和輸出格式.

他的輸出方式有很多種, 這裡主要介紹幾種項目中最常用的.

AdoNetAppender  將日誌記錄到資料庫中
FileAppender 將日誌輸出到文件
RollingFileAppender 將日誌以回滾文件的形式寫到文件中
SmtpAppender 將日誌寫到郵件中

 

2. Filters

過濾器可以過濾掉Appender輸出的內容. 

DenyAllFilter 阻止所有的日誌事件被記錄
LevelMatchFilter 只有指定等級的日誌事件才被記錄
LevelRangeFilter 日誌等級在指定範圍內的事件才被記錄
LoggerMatchFilter Logger名稱匹配,才記錄
PropertyFilter 消息匹配指定的屬性值時才被記錄
StringMathFilter 消息匹配指定的字元串才被記錄

 

3. Layouts

用於控制Appender的輸出格式, 可以使線性的, 也可以使Xml. 但是一個Appender只能有個一個Layout. 配置了這個之後, 可以不用在程式中再去自定義一個格式了.

最常用的, 應該還是自定義格式的PatternLayout. 接下來看一下 ConversionPattern 裡面的格式和意義

<ConversionPattern value="%d [%t] %-5p %c - %m%n" />

a

appdomain         

引發日誌事件的應用程式域的名稱

c (小寫)

logger

記錄日誌事件的Logger對象的名字

可以使用精度說明符控制Logger的名字的輸出層級,  預設輸出全名

註意,精度符的控制是從右開始的。例如:logger 名為 "a.b.c", 輸出模型為 %logger{2} ,將輸出"b.c"

C (大寫)

class

type

引發日誌請求的類的全名

可以使用精度控制符. 例如: 類名是 "log4net.Layout.PatternLayout",

格式模型是 %type{1}將輸出"PatternLayout"。(也是從右開始的。)

警告:會影響性能。

 d

date

記錄當前本地時間.  如 %d{HH:mm:ss,fff} 或 %d{dd MMM yyyy HH:mm:ss,fff}

建議還是使用自定義格式的時間吧. 

exception

 異常信息

日誌中必須存一個異常對象, 如果日誌事件不包含沒有異常對象, 那麼什麼也輸出不了.

異常輸出完畢後, 會跟一個換行. 一般會在輸出異常前加一個換行, 並將異常放在最後.

 F

file

 發生日誌請求的源代碼文件的名字

警告:只在調試的時候有效。調用本地信息會影響性能。

identity

 當前活動用戶的名字(Principal.Identity.Name).

警告:會影響性能。(我測試的時候%identity返回都是空的。)

 l (L的小寫)

location

 

引發日誌事件的方法(包括命名空間和類名),以及所在的源文件和行號。

警告:會影響性能。沒有pdb文件的話,只有方法名,沒有源文件名和行號。

L

p

level  

 日誌等級
 line  引發日誌的行號

m

message

由應用程式提供給日誌的消息

M

method

發生日誌請求的方法名(只有方法名而已)。

警告:會影響性能。

X

mdc

P

property

propertites

輸出事件的特殊屬性。例如: %property{user} 輸出user屬性。

屬性是由loggers或appenders添加到時間中的。 有一個預設的屬性"DE<log4net:HostName"總是會有。

DE<%property將輸出所以的屬性 。

n

newline

換行符

r

timestamp

從程式啟動到事件發生所經過的毫秒數。

t

thread

引發日誌事件的線程,如果沒有線程名就使用線程號。

w

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

例如: %date{ISO8601}%date{ABSOLUTE}

它們的性能要好於ToString。

 x

ndc

 NDC (nested diagnostic context)

%

%%輸出一個百分號

上面demo中的-5是什麼意思呢? 接著看

Format modifierleft justifyminimum widthmaximum widthcomment
%20logger false 20 none

如果logger名不足20個字元,就在左邊補空格。

%-20logger true 20 none

如果logger名不足20個字元,就在右邊補空格。

%.30logger NA none 30

超過30個字元將截斷。

%20.30logger false 20 30

logger名要在20到30之間,少了在左邊補空格,多了截斷。

%-20.30logger true 20 30

logger名要在20到30之間,少了在右邊補空格,多了截斷。

 

4. Loggers

Logger是直接和應用程式交互的組件. Logger只是產生日誌, 然後由它引用的Appender記錄到指定的地方, 並有Layout控制輸出格式.

Logger提供了多種方式來記錄一個日誌消息, 也可以有多個Logger同時存在. 每個實例化的Logger對象被log4net作為命名實體來維護.

log4net使用繼承體系, 兩個Logger, a 和 a.b, a是a.b的祖先. 每個Logger都繼承了它祖先的屬性.

日誌的等級有如下幾級:

  OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL.

 

5. Object Renders

我對Object Renders的理解是這樣的。它將告訴logger如何把一個對象轉化為一個字元串記錄到日誌里。(你可能註意到了,ILog中定義的介面接收的參數是Object,而不是String。)

例如你想把Orange對象記錄到日誌中,但此時logger只會調用Orange預設的ToString方法而已。所以要定義一個OrangeRender類實現log4net.ObjectRender.IObjectRender介面,然後註冊它。這時logger就會知道如何把Orange記錄到日誌中了。

不過我沒有測試過,具體怎麼做還是看文檔吧。

 參考:

  log4net使用手冊 (這一篇都是從這裡拷貝過來的, 鏈接裡面更加詳細)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文詳細講述了C#中MessageBox.Show用法以及VB.NET中MsgBox用法,有需要的朋友可以參考下,希望能幫到大家。 ...
  • Kooboo CMS本著功能獨立分離的原則,將站點分為三部分組成:用戶管理,站點管理和內容資料庫管理。各個功能之間既可獨立使用,也可以容易組成在一起形成一個完整的系統。 用戶管理 管理整個系統內的用戶和角色許可權定義。管理員在通過用戶管理模塊管理用戶的相關信息,包括:用戶名,密碼,Email,是否為超 ...
  • 今天,測試一個項目的時候,拋出了這個莫名其妙的異常,然後就開始了一天的調試之旅... 花了很長時間,沒有從代碼找出任何問題... 那麼到底哪裡出問題呢? 根據下麵那段長長的錯誤日誌: 上百度,上谷歌... 有人說會不會是Lazy載入的問題,說他試過設置Lazy=false就不會出現這個問題了???納 ...
  • 廢話不多說,直接上代碼(PS:我就喜歡簡單、直接、粗暴) using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Remoting.Messaging;using System.Text ...
  • 所有類型最終都從System.Object類型派生。 最基本方法(object的公共方法): 1.Equals:如果兩個對象具有相同的值,返回true. 2.GetHashCode:返回對象值得一個哈希碼,如果某個類型的對象要在一個哈希表集合眾作為key使用,該類型應重寫該方法。 3.ToSting ...
  • 在2.3中完成依賴註入後,這次主要實現欄目的添加功能。按照前面思路欄目有三種類型,常規欄目即可以添加子欄目也可以選擇是否添加內容,內容又可以分文章或其他類型,所以還要添加一個模塊功能。這次主要實現欄目的添加,附帶實現模塊列表功能,並將業務邏輯層的功能都實現了非同步方法。 先來個完成後的界面吧。 一、業... ...
  • 上一篇, 都是從別人那裡拷過來的, 主要是介紹規則和說明的. 這一篇, 才是重點, 講實際使用. 首先介紹項目中最常用的配置文件方式. 一、log4net.config 文件方式 我習慣, 把log4net的配置, 放在一個單獨的配置文件中, 而不是放在 app.config或者web.config ...
  • 再簡單的功能,也需要一坨代碼的支持。Profile 的編輯功能主要就是修改個人的信息。比如用戶名、頭像、性別、電話……雖然只是一個編輯界面,但添加下來,涉及了6個文件的修改和7個新創建的文件。各種生成的和手寫的代碼,共有934行之多。 1. Account 和 Profile 分離 什麼是 Acco ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...