NLog日誌管理工具

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:收件人的郵箱,能夠發送多個收件人,使用逗號分開-->
相關文章
相關標籤/搜索