.Net日誌庫Nlog的詳細配置與調用演示

NLog是一個簡單靈活的.NET日誌記錄類庫,NLog的API非常類似於log4net,且配置方式非常簡單。通過使用NLog,我們可以在任何一種.NET語言中輸出帶有上下文的調試信息,根據項目需求配置署出格式和輸出目標的規則。
NLog使用路由進行配置,但log4net卻使用層次性的appender配置,這樣就讓NLog的配置文件非常容易閱讀,並便於今後維護。
支持多種形式輸出日誌:文本文件 系統日誌 數據庫 控制檯 郵箱 等
一 獲取方式
1獲取該類:
第一種 在nuget控制檯輸入安裝nlog命令: Install-Package NLog.Config

第二種 在nuget程序包管理界面上,搜索安裝Nlog 和Nlog configuration,這樣會自動生成一個config文件,這樣和程序或者web自己的config區分開方便日後使用管理,互不影響

第三種 GitHub 上https://github.com/NLog/NLog/     https://github.com/NLog/NLog/releases/
二 配置文件
支持多種配置形式:
1直接在使用應用程序配置文件或者web的配置文件(app.config / web.config)
2可以設置後綴爲.nlog的配置文件,這個就保存在程序目錄下,如果是web項目裏跟web.config同級目錄(程序名.exe.nlog / web.nlog)
3 NLog.config 這個是比較好的一個形式,也比較推薦使用的,網上絕大部分都是用這個形式的.就在程序目錄下.
4 使用NLog.dll.nlog ,這個和NLog.dll在同一級目錄內
我這裏在app.config裏配置數據庫加密串,NLog.config在安裝時自動生成 ,比其他的配置簡單
配置targets和rules:
<targets /> - 定義日誌的目標/輸出,下級是<target>
<rules /> - 定義日誌的路由規則,下級是<logger>
三 標籤解讀
<nlog>標籤
autoReload 修改配置文件後是否允許自動加載無須重啓程序
throwExceptions 內部日誌系統拋出異常
internalLogLevel 可選Trace|Debug|Info|Warn|Error|Fatal決定內部日誌的級別 Off 關閉
internalLogFile 把內部的調試和異常信息都寫入指定文件裏
建議throwExceptions的值設爲“false”,這樣由於日誌引發的問題不至於導致應用程序的崩潰。
<targets>標籤
<target />區域定義了日誌的目標或者說輸出 ,,在這裏可以按需設置文件名稱和格式,輸出方式
name:自定義該target的名字,可供rule規則裏使用
type: 定義類型,官方提供的可選類型有:
Chainsaw|ColoredConsole |Console |Database|Debug|Debugger|EventLog|File|LogReceiverService|Mail|Memory|MethodCall|Network |NLogViewer|Null |OutputDebugString|PerfCounter|Trace|WebService
不過常用的還是 File \Database \Colored Console\ Mail

layouts 用來規定佈局樣式,語法“${屬性}”,可以把上下文信息插入到日誌中,官方提供的可以用的屬性見文末附錄

<rules>標籤

各種規則配置在logger裏
name - 記錄者的名字
minlevel - 最低級別
maxlevel - 最高級別
level - 單一日誌級別
levels - 一系列日誌級別,由逗號分隔。
writeTo - 規則匹配時日誌應該被寫入的一系列目標,由逗號分隔。
<variable>標籤
變量定義
 <variable name="variable1" value="${basedir}/logs"/> 
 <targets>   
    <target name="File" xsi:type="File" fileName="${variable1}/${shortdate}.txt"/>  
 </targets>
四 調用方法
1 添加引用 using NLog;
2實例化 private Logger logger = LogManager.GetCurrentClassLogger();
3調用:
  logger.Trace("Trace Message");
        logger.Debug("Debug Message");
        logger.Info("Info Message");
        logger.Error("Error Message");
        logger.Fatal("Fatal Message");

五 效果舉例
1 配置輸出到文件:
 <?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
  <variable name="variable1" value="${newline}date:	${date}${newline}level:	${level}${newline}logger:	${logger}${newline}machinename:	${machinename}
${newline}message:	${message}${newline}appdomain:	${appdomain}${newline}assembly-version:	${assembly-version}${newline}basedir:	${basedir}
${newline}callsite:	${callsite}${newline}callsite-linenumber:	${callsite-linenumber}${newline}counter:	${counter}${newline}nlogdir:	${nlogdir}
${newline}processid:	${processid}${newline}processname:	${processname}${newline}specialfolder:	${specialfolder}
${newline}stacktrace: ${stacktrace}${newline}-----------------------------------------------------------" />
  <targets>
    <target name="log_file" xsi:type="File" fileName="${basedir}/LogInformation/${level}_${shortdate}.txt" layout="${variable1}" />
  </targets>
  <rules>
    <logger name="*"   writeTo="log_file" />
  </rules>
</nlog>
效果:


 附錄:layouts 屬性

${activityid} 將其置入日誌System.Diagnostics trace 
${all-event-properties} 事件日誌上下文
${appdomain} 當前應用程序域
${assembly-version} 應用程序
${basedir} 應用程序域的基本目錄。
${callsite} (類名稱、方法名稱和相關信息的源信息)。
${callsite-linenumber} 調用類的
${counter} 數值
${date} 當前日期和時間。
${document-uri} 用於Silverlight應用。
${environment} 環境變量
${event-properties}  
${exception} exception信息
${file-contents} 顯示指定文件的內容
${gc} 垃圾收集器
${gdc} 診斷上下文
${guid} GUID
${identity} 線程標識信息
${install-context} 安裝參數
${level} 級別。
${literal}  
${log4jxmlevent} XML事件描述
${logger} 記錄器的名字
${longdate} 日期和時間的格式分類yyyy-MM-dd HH:mm:ss.ffff。
${machinename} 名稱
${mdc}  映射診斷
${mdlc} 異步映射診斷上下文
${message} 消息
${ndc} 線程結構
${ndlc} 異步線程
${newline} 文字換行
${nlogdir} nlog.dll目錄。
${performancecounter} 述性能計數器。
${processid} 當前進程標識符
${processinfo} 運行信息
${processname} 當前進程的名稱。
${processtime} 該時間過程中格式HH:MM:ss.mmm。
${qpc} 高精度定時器,基於返回的值從queryperformancecounter(任選地)轉換爲秒。
${registry} 從註冊表中的值。
${sequenceid} ID
${shortdate} 短時間 格式YYYY-MM-DD。
${sl-appinfo} Silverlight應用。
${specialfolder} 文件夾路徑
${stacktrace} - 堆棧跟蹤渲染器。
${tempdir} 臨時目錄中。
${threadid} 當前線程的標識符。
${threadname} 當前線程。
${ticks} 當前日期和時間。
${time} 24小時格式HH:MM:ss.mmm。
${var} {$var}-提供新的變量(4.1)
${windows-identity} indows線程標識信息(用戶名)

官方參考:
https://github.com/nlog/NLog/wiki/Layout%20Renderers
https://github.com/nlog/NLog/wiki/Targets
https://github.com/NLog/NLog/releases/
http://nlog-project.org/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章