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/
————————————————
版權聲明:本文為CSDN博主「一木一百」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u013667895/article/details/79016059