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](
    ,) NOT NULL,
    ) NOT NULL,
    [Origin] [nvarchar](max) NULL,
    ) 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:收件人的邮箱,可以发送多个收件人,使用逗号分开-->

NLog日志管理工具的更多相关文章

  1. NLog日志管理工具(转)

    一.通过VS建立一个控制台应用程序. 二.打开程序包管理器控制台.具体操作如下:[工具]>[库程序包管理器]>[程序包管理器控制台]. 三.在程序包管理器控制台下输入命令:Install- ...

  2. Java程序员须知的七个日志管理工具(转)

    Splunk vs. Sumo Logic vs. LogStash vs. GrayLog vs. Loggly vs. PaperTrails vs. Splunk>Storm 英文原文:T ...

  3. LogCook 一个简单实用的Android日志管理工具

    众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...

  4. 日志管理工具之logrotate

    Logrotate配置和测试 logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间.logrotate是基于cron ...

  5. mysql 开发进阶篇系列 33 工具篇(mysqlbinlog日志管理工具)

    一.概述 由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到mysqlbinlog日志管理工具. mysqlbinlog的语法如下: mysqlbinlog ...

  6. 系统自带的日志管理工具-rsyslogd

    系统自带的日志管理工具-rsyslogd 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志管理简介 1.什么是日志 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以 ...

  7. Java程序员须知的七个日志管理工具

    本文由 ImportNew - 赖 信涛 翻译自 takipiblog.欢迎加入翻译小组.转载请见文末要求. Splunk vs. Sumo Logic vs. LogStash vs. GrayLo ...

  8. web项目中日志管理工具的使用

    在web项目中,很多时候会用到日志管理工具,常见的日志管理用具有:JDK logging(配置文件:logging.properties) 和log4j(配置文件:log4j.properties) ...

  9. CentOS7日志管理工具 journalctl

    1.简介 日志管理工具journalctl是centos7上专有的日志管理工具,该工具是从message这个文件里读取信息. Systemd统一管理所有Unit的启动日志.带来的好处就是,可以只用jo ...

随机推荐

  1. Windows Azure 负载均衡会话保持

    Windows Azure的负载均衡器默认是5元组的hash:源地址,源端口,目的地址,目的端口,协议.即:只有上述五个元组完全一致的会话数据包才会被转发到同一个后端服务器.显然,对于绝大多数通过NA ...

  2. MMORPG大型游戏设计与开发(客户端架构 part3 of vegine)

    无论在何处在什么地方,我们都或多或少的接触到数学知识.特别是在客户端中,从打开界面的那一刻起就有太多与数学扯上的关联,如打开窗口的大小,窗口的位置,窗口里面的元件对象,以及UI的坐标等等.而在进入游戏 ...

  3. Eclipse里面代码上下文变量点击后不一起变色

    使用eclipse的时候,点击变量发现该类里面的变量颜色不变,经百度得知这个功能没有打开,下面打开方法: 1.使用“Alt+Shift+O”对该提示功能的开/关切换2.可以在以下设置选中后的文本提示颜 ...

  4. HDU 4630 No Pain No Game 树状数组+离线操作

    题意:给一串数字,每次查询[L,R]中两个数的gcd的最大值. 解法:容易知道,要使取两个数让gcd最大,这两个数最好是倍数关系,所以处理出每个数的所有倍数,两两间根据倍数关系形成一条线段,值为该数. ...

  5. Codeforces Round #282 Div.1 B Obsessive String --DP

    题意: 给两个串S,T,问能找出多少的S的(a1,b1)(a2,b2)..(ak,bk),使Sa1---Sb1,...Sak---Sbk都包含子串T,其中k>=1,且(a1,b1)...(ak, ...

  6. BZOJ1216[HNOI2003]操作系统 [模拟 优选队列]

    1216: [HNOI2003]操作系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 754  Solved: 421[Submit][Status ...

  7. 平面直接坐标系线段相交问题(小Q(钟神)的问题)

    [问题描述] 小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在?轴正半轴和?轴正半轴分别挑选?个点.随后,他将 ...

  8. Unity自动构建

    Jenkins/Hudson Jenkins的前身是Hudson(Sun开发),2010年从Hudson分支出来.由于Sun被Oracle收购,Oracle声称拥有Hudson的商标所有权,Hudso ...

  9. javascript_core之正则、Math、Date

      javascript_core之正则.Math.Date 1.RegExp:Regular Expression,创建封装正则表达式: ①正则直接量:var reg=/reg/ig:②var re ...

  10. Android使用Java Mail API发送邮件

    最近在考虑为已经有的一个应用程序增加一个用户反馈的功能,用户可以通过反馈功能将用户的意见和建议.程序出现的问题以一种更符合用户习惯的方式反馈回来.网上也有一些实现好的反馈程序的服务,包括bug的提交. ...