對項目添加NLog


安裝完成后,在項目里面會自動引入該引入的dll,並且會添加如下兩個文件

NLog的配置主要是在這個config文件里。當然也可以將這個文件里面的nlog節點復制到項目配置文件App.config/Web.config里面。
NLog的配置文件主要有3個節點variable,targets,rules。
variable節點用於定義一些變量
<targets /> - 定義日志的目標/輸出,下級是<target>
下面這兩個是用於在文本文件里面寫入日志,fileName表示日志文件的路徑,layout表示日志的格式。大括號里面的變量是系統預定義的,
當然也可以在variable節點里面自定義
<target name="info" xsi:type="File"
fileName="${basedir}/Logs/Info/${shortdate}/info.txt"
maxArchiveFiles="30"
layout="${longdate} | ${level:uppercase=false} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />
<target name="error" xsi:type="File"
fileName="${basedir}/Logs/Error/${shortdate}/error.txt"
maxArchiveFiles="30"
layout="${longdate} | ${level:uppercase=false} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />
下面這個是將日志寫入數據庫的配置,這里配置的是SqlServer,當然還可以配置其他數據庫
<target xsi:type="Database"
name="DatabaseFile"
dbProvider="System.Data.SqlClient"
commandText="Insert into ErrorLog(ID, Content, CreateTime) Values(@id, @content, @createTime);"
connectionString="data source=.;initial catalog=pay.log;user id=sa;password=sa;">
<parameter name="@id" layout = "${event-context:item=id}"/>
<parameter name="@content" layout = "${event-context:item=content}" />
<parameter name="@createTime" layout = "${date}"/>
結合上面的target節點,配置如下的路由節點,這些logger節點在rules節點下
<logger name="*" writeTo="DatabaseFile" />
<logger name="*" minlevel="Info" writeTo="info" />
<logger name="*" minlevel="Error" writeTo="error" />
<logger name="*" writeTo="console" />
代碼中調用NLog:
public static void DBLog() { //log.Error("錯誤日志"); //log.Info("信息日志");
//log.Fatal("fatal日志"); LogEventInfo lei = new LogEventInfo(); lei.Properties.Add("id", Guid.NewGuid().ToString()); lei.Properties.Add("content", "sdfsd3222第三代2222"); //lei.Properties.Add("createTime", DateTime.Now); lei.Level = LogLevel.Info; log.Log(lei); }
上面注釋的3行分別對應target節點里面name為error和info這兩個節點配置,fatal的日志和error的日志寫在了同一個文件里面。
還有一個統一的方法就是log.Log(LogLevel.Error, "錯誤2553");根據參數來確定日志的級別,但是這個方法要注意的是,如果參數是error,
那么會在info和error兩個地方寫入日志,但是只有info的時候,就只在info下有日志。
根據target的配置,調用函數后,日志文件在bin\Release\Logs下

后面的代碼是將日志寫入數據庫的,對應的target節點是DatabaseFile。lei.Level這個屬性必須設置,除了為LogLevel.Off外,其他的都可以
將日志寫入數據庫。要注意的是,在此之前確保數據庫里面有相應的表。
