• NLog日志管理工具


    Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数据库中,或者发送Emial到指定账户。

    可以在官网 这里下载Nlog:http://nlog-project.org/ 

    如果想使用NuGet下载,可以使用Visual Studio(本人使用的Visual Studio 2015) 可以直接在 工具->NuGet吃-> 程序包管理控制台 ->输入 PM>Install-Package NLog.Config

    安装好以后,在项目中就有了Nlog程序集和Nlog.config文件

    打开Nlog.config文件,在target节点中,增加对数据库的配置。

    在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中进行引用

    <nlog>
         <!--configuration是项目的文件夹,如果根目录可以不写-->
         <include file="${basedir}/configuration/NLog.config" />
    </nlog>

    如果使用数据库记录文件的话需要增加一个表

    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的配置就已经完成.

    我们在类里使用时需要申明一下Logger变量

    //引用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:收件人的邮箱,可以发送多个收件人,使用逗号分开-->
  • 相关阅读:
    nyoj-68-三点顺序-计算几何
    zoj--1089--Lotto---DFS VS 暴力求解
    zoj----1090---The Circumference of the Circle---数学几何
    nyoj-阶乘0
    nyoj-回文字符串--动态规划
    nyoj-最长公共子序列---动态规划
    hdu-1285确定比赛名次---拓扑排序
    等式数量---hash算法
    学生学籍管理系统
    2020.2.9 解决Zabbix agent is not available&windows下安装zabbix-agent 主机部署监控
  • 原文地址:https://www.cnblogs.com/tweet/p/4721032.html
Copyright © 2020-2023  润新知