C#日誌使用

本文參考連接html

日誌框架

框架選擇:NLog數據庫

安裝方法,Nuget命令行:Install-Package NLog緩存

經常使用規則

  1. 儘可能不要在循環中打印日誌。
  2. 應輸出錯誤的堆棧信息:e.Message僅爲異常描述,e.ToString()能夠打印異常堆棧。
  3. 拋異常的地方不要打印日誌,由於通常捕獲異常的地方會打印,屢次打印形成重複輸出。
  4. 日誌級別的使用要準確。
  5. 關鍵信息能夠加顯眼的符號,如程序啓動時:======= app start =======,方便快速定位信息。
  6. 不要使用Console.WriteLine(),效率低。
  7. 日誌的保持時間應在15天以上重要日誌適當延長。
  8. 配置日誌框架輸出格式的內容不要包含類名、函數名、行號等信息,這種行爲消耗巨大。
  9. 謹慎記錄日誌,避免輸出大量無效日誌、信息不全的日誌。
  10. 日誌函數的參數不要使用拼接字符串,使用格式化字符串。

應該打印什麼日誌

  1. 調試日誌:開發階段使用大量調試日誌,方便調試,上線後禁止。
  2. 運行日誌:記錄程序的運行,該部分日誌應能體現程序的運行流程。
  3. 狀態日誌:記錄程序的狀態,用於數據展現。

NLog功能簡介

NLog使用
  1. 使用單獨文件進行NLog配置,文件名命名爲NLog.config
  2. 配置autoReload="true":配置修改是否自動加載。
  3. 配置throwExceptions="false":日誌出現異常時是否須要拋出異常,若配置爲true日誌記錄異常時因爲沒有捕獲異常,會致使程序掛掉。
  4. 配置internalLogLevel=Debug:表示nlog日誌的執行日誌記錄等級,開發過程當中配置爲Debug,上線後配置爲Info。
  5. 配置internalLogFile:表示nlog日誌的執行日誌記錄的位置。經過./XXXX的方式能夠配置到程序的相對目錄。日誌一概保存到./Logs/日期/進程名.log
  6. 日誌級別使用範圍規定爲Debug-Error,只容許使用這四個級別的日誌。開發過程當中將日誌等級設爲Debug,上線後設置爲Info。
  7. 配置targets的aasync=true:異步保存日誌,從而防止日誌影響業務性能。
日誌等級
Level FirstCharacter Ordinal
Trace T 0
Debug D 1
Info I 2
Warn W 3
Error E 4
Fatal F 5
Off O 6

經過NLog.LogManager.GetLogger咱們能夠獲取一個日誌對象示例。傳入的參數爲日誌實例名,咱們能夠在日誌名中經過${logger}參數輸出日誌實例名。能夠將不一樣的日誌保存到不一樣的文件。網絡

targets配置

NLog經過target配置日誌輸入的目標。能夠經過配置多個target將日誌輸入到多個目錄,多個目標(文件,網絡,數據庫等)。如經過設置2個目標,將info和error日誌分開保存。其中不少參數是共用的,咱們能夠設置一個默認參數default-target-parameters,減小配置文件節點。 併發

xsi:type:輸入類型:app

  • ColoredConsole : 使用可自定義的顏色將日誌消息寫入控制檯。
  • Console - 將日誌消息寫入控制檯。
  • Debug - 模擬目標-用於測試。
  • File - 將日誌消息寫入一個或多個文件。
  • Mail - 使用 smtp 協議或拾取文件夾經過電子郵件發送日誌郵件。
  • Null - 丟棄日誌消息。主要用於調試和基準測試。

name:目標的名字,能夠經過建立Rule規則限制目標的輸出。
filename:文件名,日誌保存文件時能夠保存到該文件中。文件名支持參數化,經過各類參數更方便的輸出日誌。
archiveFileName:爲了防止日誌文件保存的太大,咱們將日誌文件拆分保存。經過archiveFileName參數設置保存格式,具體格式能夠到這裏查看。
createDirs:若設置的日誌文件夾不存在,則自動建立文件夾。
keepFileOpen:爲了提升文件寫入性能,避免每次寫入文件都開關文件,將keepFileOpen設置爲true,咱們經過openFileCacheTimeout參數定時關閉文件。
autoFlush:爲了提升日誌寫入性能,沒必要每次寫入日誌都直接寫入到硬盤上,將autoFlush設置爲false,咱們經過openFileFlushTimeout參數定時寫入文件。
openFileCacheTimeout:將keepFileOpen參數設置爲false,則設置定時關閉日誌。防止日誌一直開着佔用着。
openFileFlushTimeout:將autoFlush參數設置爲false,則設置定時將日誌從緩存寫入到硬盤時間。
archiveAboveSize:爲了防止一個文件日誌太大,咱們須要根據指定大小將日誌拆文件保存。archiveAboveSize參數的單位是字節。經過設置爲10240=10KB,每一個日誌大小達到10KB就會自動拆分文件,拆分後的文件名規則經過archiveFileName設置,拆分文件名的規則經過archiveNumbering設置,具體規則能夠查看這裏。
concurrentWrites:支持多個併發一塊兒寫文件,提升文件寫入性能。
encoding: Nlog默認保存的編碼格式爲Encoding.Default,中文保存到日誌中會出現亂碼,將其設置爲utf-8,就能夠正常保存了。
layout:表示輸出的格式,若爲最簡單的內容輸入,則直接經過參數設置輸入格式便可。除了最簡單的文本格式還支持如下四種類型的數據,經過xsi:type參數設置layout的格式,如xsi:type="JsonLayout"框架

  • CSV - A specialized layout that renders CSV-formatted events.
  • Compound - A layout containing one or more nested layouts.
  • Log4JXml - A specialized layout that renders Log4j-compatible XML events.
  • JSON - A specialized layout that renders to JSON. Json格式保存咱們須要在layout節點下增長attribute來增長字段。
rules配置

咱們能夠建立一系列規則約束輸出的內容。方法是在NLog節點下添加rules節點,rules節點下能夠添加多個logger節點,每一個logger節點爲一條約束。異步

<rules>
    <logger name="*" minlevel="Debug" writeTo="file" />
</rules>
  • name:logger名稱,若爲'*',則表示用於全部日誌。
  • minlevel:表示當前約束的最小等級,只有等於或大於該值的日誌等級纔會被記錄。
  • writeTo:表示當前規則約束那個target。
相關文章
相關標籤/搜索