Nlog是一個很不錯的.NET日誌記錄組件,它能夠將日誌輸出到控件臺,保存到文本,也能夠很方便的記錄到數據庫中,或者發送Emial到指定帳戶。數據庫
能夠在官網 這裏下載Nlog:http://nlog-project.org/ 工具
若是想使用NuGet下載,能夠使用Visual Studio(本人使用的Visual Studio 2015) 能夠直接在 工具->NuGet吃-> 程序包管理控制檯 ->輸入 PM>Install-Package NLog.Config佈局
安裝好之後,在項目中就有了Nlog程序集和Nlog.config文件ui
打開Nlog.config文件,在target節點中,增長對數據庫的配置。spa
在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"> <!-- ###################nlog 日誌輸出配置文件#################### <targets /> - 定義日誌的目標/輸出 <rules /> - 定義日誌的路由規則 <extensions /> - 從*.dll加載NLog擴展 <include /> - 導入外部配置文件 <variable /> - 爲配置變量賦值 --> <!-- ########################## targets 輸出目標 ########################## name:節點/輸出名稱 xsi:type:輸出類型 好比「File」,「Database」,「Mail」。若是你使用了名字空間,這個屬性會被命名爲 xsi:type. fileName:日誌的文件名 layout:佈局功能。格式是${}。在括號中能夠定義日期、log記錄級別、調用程序等上下文信息。既能夠規範的命名文件,也能夠記錄在日誌中,方便分析。 --> <targets> <target name="exceptionFile" xsi:type="File" fileName="${basedir}/LogFile/${shortdate}/${logger}_${level}.txt" layout="[${longdate}][${level:uppercase=true}][${logger}]${newline}${message}${newline}"/> <target name="db" xsi:type="Database" connectionstring="Server=XXXX;Database=XX;uid=XX;pwd=XX" commandText="insert into T_SystemLogs(createdate,origin,logLevel,message,stackTrace) values (@createdate,@origin,@logLevel,@message,@stackTrace)"> <!--日誌發生時間--> <parameter name="@createdate" layout="${longdate}"/> <!--日誌來源--> <parameter name="@origin" layout="${callsite}"/> <!--日誌等級--> <parameter name="@logLevel" layout="${level}"/> <!--日誌信息--> <parameter name="@message" layout="${message}"/> <!--堆棧信息--> <parameter name="@stackTrace" layout="${stacktrace}"/> </target> <target name="message" xsi:type="Database" connectionstring="Server=XXXX;Database=XX;uid=XX;pwd=XX" commandText="insert into T_MessageRecord(createdate,origin,logLevel,message,stackTrace) values (@createdate,@origin,@logLevel,@message,@stackTrace)"> <!--日誌發生時間--> <parameter name="@createdate" layout="${longdate}"/> <!--日誌來源--> <parameter name="@origin" layout="${callsite}"/> <!--日誌等級--> <parameter name="@logLevel" layout="${level}"/> <!--日誌信息--> <parameter name="@message" layout="${message}"/> <!--堆棧信息--> <parameter name="@stackTrace" layout="${stacktrace}"/> </target> </targets> <!-- ####################### rules路由規則 ##################### name:記錄日誌的名字。能夠使用通配符* minlevel:記錄日誌的最低級別,如配置爲Debug,那麼全部高於等於這個級別的日誌都會寫到日誌文件裏。 固然也能夠指定maxlevel或者單一level,如level=「Debug」,那麼只記錄Debug級別的信息。也能夠指定levels,格式爲levels=「Debug,Info」。 maxlevel: 該規則所匹配日誌範圍的最高級別 level:該規則所匹配的單一日誌級別 levels:該規則所匹配的一系列日誌級別,由逗號分隔。 writeTo:寫入的目標日誌文件 final : 標記當前規則爲最後一個規則。其後的規則即時匹配也不會被運行。 --> <rules> <logger name="*" minlevel="Info" writeTo="exceptionFile"/> <logger name="*" minlevel="Error" writeTo="db"/> <logger name="*" minlevel="Trace" writeTo="message"/> <logger name="*" minlevel="Fatal" writeTo="db"/> </rules> </nlog>
在Web.Config中進行引用code
<nlog> <!--configuration是項目的文件夾,若是根目錄能夠不寫--> <include file="${basedir}/configuration/NLog.config" /> </nlog>
若是使用數據庫記錄文件的話須要增長一個表xml
CREATE TABLE [dbo].[T_SystemLogs]( [LogId] [int] IDENTITY(1,1) NOT NULL, [CreateDate] [nvarchar](100) NOT NULL, [Origin] [nvarchar](max) NULL, [LogLevel] [nvarchar](50) NULL, [Message] [nvarchar](max) NULL, [StackTrace] [nvarchar](max) NULL, CONSTRAINT [PK_T_SystemLogs] PRIMARY KEY CLUSTERED ( [LogId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
這樣Nlog的配置就已經完成.blog
咱們在類裏使用時須要申明一下Logger變量utf-8
//引用Nlog using NLog; namespace XXXX { public partial class NlogText: System.Web.UI.Page { //聲明變量 public static Logger logger = LogManager.GetCurrentClassLogger(); protected void Page_Load(object sender, EventArgs e) { //調用 logger.Info("My Test Log"); } } }
這樣一個完整的Nlog就演示完成了.
在配置規則中 咱們的Info方法是記錄txt文檔,其中
fileName="${basedir}/LogFile/${shortdate}/${logger}_${level}.txt"
生成的日誌記錄名的規範爲 根目錄/LogFile文件夾/當前日期文件夾(2015-08-01)格式/類名_等級(Info).txt
而logger.Error(""); 以及Trace/Fatal 都記錄到了數據庫中,能夠在異常中使用這些方法捕獲到數據庫中,會自動記錄哪一個類中的方法出現的異常
固然咱們也能夠配置爲將異常以郵件形式發送給咱們
就在配置一個<target>節點
<target name="email" xsi:type="Email" smtpServer="smtp:163.com" smtpPort="587" smtpAuthentication="Basic" smtpUserName="XXX" smtpPassword="XX" from="XXX@163.com" to="XXX@qq.com" subject="${machinename}" header="====================" body="${newline}${message}${newline}" footer="====================" enableSsl="true" addNewLine="true"/> <!--其中to:收件人的郵箱,能夠發送多個收件人,使用逗號分開-->