廢話不多說直接進入正題。
1、在項目中加入Nlog的應用

安裝后會出現兩個文件

2、我們打開Nlog.config配置文件設置日志記錄
<?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"> <!-- See https://github.com/nlog/nlog/wiki/Configuration-file for information on customizing logging rules and outputs. --> <!-- 定義變量 projectName 項目名稱 logDirectory 文件路徑 --> <variable name="projectName" value="test"/> <variable name="logDirectory" value="F:/nlog/${projectName}/${shortdate}"/> <targets> <!-- 定義輸出模板: type="File":這個記錄方式為文件類型 fileName="${logDirectory}/All.log":表示輸出到文件All.log中 layout="...":輸出文件中錯誤的顯示格式 ${logDirectory}:為上述定義的路徑 ${longdate}:輸出長日期 yyyy-MM-dd HH:mm:ss.ffff(例:2013-01-31 14:49:21.2120) ${level}:錯誤等級(由低到高為Trace,Debug,Info,Warn,Error,Fatal) ${newline}:輸出 新的一行 ${stacktrace}:輸出 堆棧信息 ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}:輸出 命名空間.類名.方法名(文件路徑:行號) ${message}:輸出錯誤信息--> <target xsi:type="File" name="logfiles" fileName="${logDirectory}/${shortdate}.log" layout="${longdate} ${level} ${message} ${stacktrace} ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}" /> </targets> <rules> <!-- 定義輸出日志: name="*":記錄所有信息 minlevel="Trace":記錄的最低錯誤級別為Trace writeTo="logfiles":日志寫入logfiles的target中--> <logger name="*" minlevel="Trace" writeTo="logfiles" /> </rules> </nlog>
3、用簡單的控制台程序測試一下
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NLog; namespace NlogDemo { class Program { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); static void Main(string[] args) { WriteLog(); } public static void WriteLog() { Logger.Log(LogLevel.Error, "nlog test error"); } } }
F5運行之后在我設置的路徑下會有個以時間命名的log文件

日志內容

日志記錄的內容與你在配置文件配置的fileName格式有關
4、以上的是文件的記錄方式,下面我們來看數據庫的記錄方式
<?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"> <!-- See https://github.com/nlog/nlog/wiki/Configuration-file for information on customizing logging rules and outputs. --> <!-- 定義變量 projectName 項目名稱 logDirectory 文件路徑 --> <variable name="projectName" value="test"/> <variable name="logDirectory" value="F:/nlog/${projectName}/${shortdate}"/> <targets> <!-- 定義輸出到MySQL中: type="database":這個記錄方式是數據庫 dbProvider="MySql.Data.MySqlClient":使用MySQL的連接方式 connectionString="":數據庫的連接字符串 commandText="insert into Logs(CreateDate,LogLevel,CallSite,Massage,StackTrace) values (@CreateDate,@LogLevel,@CallSite,@Massage,@StackTrace)":insert語句 <target xsi:type="Database" name="logdatabase" dbProvider="MySql.Data.MySqlClient" connectionString="Server=127.0.0.1;Database=mytestdatabase;Uid=root;Pwd=123;" commandText="insert into Logs(create_time,loglevel,callsite,massage,stacktrace) values (@create_time,@loglevel,@callsite,@massage,@stacktrace)"> <!-- 對應到insert語句的參數的值--> <parameter name="create_time" layout="${longdate}" /> <parameter name="loglevel" layout="${level}" /> <parameter name="callsite" layout="${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}" /> <parameter name="massage" layout="${message}" /> <parameter name="stacktrace" layout="${stacktrace}" /> </target> </targets> <rules> <!-- 定義輸出日志: name="*":記錄所有信息 minlevel="Trace":記錄的最低錯誤級別為Trace writeTo="logdatabase":日志寫入數據庫logdatabase中--> <logger name="*" minlevel="Trace" writeTo="logdatabase" /> </rules> </nlog>
sql語句
CREATE TABLE `mytestdatabase`.`Logs` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `create_time` DATETIME NOT NULL, `loglevel` VARCHAR(5) NOT NULL, `callsite` VARCHAR(5000) DEFAULT NULL, `massage` LONGTEXT, `stacktrace` VARCHAR(5000) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
控制台程序還是上面的代碼直接F5運行
數據庫表中的數據

當然<targets>下面可以包含很多個target 我們也可以把日志文件同時寫到文件和數據庫表中
<?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"> <!-- See https://github.com/nlog/nlog/wiki/Configuration-file for information on customizing logging rules and outputs. --> <!-- 定義變量 projectName 項目名稱 logDirectory 文件路徑 --> <variable name="projectName" value="test"/> <variable name="logDirectory" value="F:/nlog/${projectName}/${shortdate}"/> <targets> <target xsi:type="File" name="logfiles" fileName="${logDirectory}/${shortdate}.log" layout="${longdate} ${level} ${message} ${stacktrace} ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}" /> <target xsi:type="Database" name="logdatabase" dbProvider="MySql.Data.MySqlClient" connectionString="Server=127.0.0.1;Database=mytestdatabase;Uid=root;Pwd=123;" commandText="insert into Logs(create_time,loglevel,callsite,massage,stacktrace) values (@create_time,@loglevel,@callsite,@massage,@stacktrace)"> <parameter name="create_time" layout="${longdate}" /> <parameter name="loglevel" layout="${level}" /> <parameter name="callsite" layout="${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}" /> <parameter name="massage" layout="${message}" /> <parameter name="stacktrace" layout="${stacktrace}" /> </target> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="logfiles,logdatabase" /> </rules> </nlog>
這里只是nlog日常簡單的應用,更加詳細的應用請參考
NLog Doc http://www.nlog-project.org/
