NLog 2.0.0.2000 使用实例

原文地址:http://www.cnblogs.com/sorex/archive/2013/01/31/2887174.html

--------------------------------------------------------------------------------------------

每条跟踪信息都包含一个记录等级(log level)信息,用来描述该条信息的重要性。NLog支持如下几种记录等级:

  1. Trace - 最常见的记录信息,一般用于普通输出
  2. Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
  3. Info - 信息类型的消息
  4. Warn - 警告信息,一般用于比较重要的场合
  5. Error - 错误信息
  6. Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。

--------------------------------------------------------------------------------------------

之前一直都是使用log4net,但是那令人生畏的维护速度,还是令我转向了NLog。首先我不确定各版本的差异,所以这里仅仅以我用的版本来写。其次,本文以基本应用为基准,不涉及复杂的配置方案。

本文地址http://www.cnblogs.com/sorex/archive/2013/01/31/2887174.html

O、情景(设想情景,各位请按自己需求进行变更)

1.在Logs文件夹下,分日期文件夹记录每日的错误信息。

2.在日期文件夹下,有All.log记录全部错误信息以及UI.log、BLL.log、DAL.log三个日志文件分别记录错误信息。

3.同时在一个单独的MySQL数据库ProjectLogDB中的Logs表中记录错误信息。

4.错误信息包含发生错误的时间、错误级别、堆栈信息、发生错误的方法、源文件路径及行号、错误内容、错误分类(UI、BLL、DAL)。

ok就是上面这些设定,没有其他的神马了。

一、在项目中加入NLog的引用

打开NuGet搜索NLog安装下面的4个

安装完成后会在项目中出现如下2个文件

二、设置日志记录

1.打开NLog.config文件,首先我们搞的All.log


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<?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">

    <!-- 定义参数:

    ${basedir}:系统路径

    ${shortdate}:短日期 yyyy-MM-dd(例:2013-01-31)

    ${basedir}/Logs/${shortdate}:即为在系统路径下的Logs文件夹下面的日期文件夹-->

    <variable name="logDirectory" value="${basedir}/Logs/${shortdate}"/>

    <targets>

        <!-- 定义输出模板:

        type="File":这个记录方式为文件类型

        fileName="${logDirectory}/All.log":表示输出到文件All.log中

        layout="...":输出文件中错误的显示格式

        ${logDirectory}:为上述定义的路径

        ${longdate}:输出长日期 yyyy-MM-dd HH:mm:ss.ffff(例:2013-01-31 14:49:21.2120)

        ${level}:错误等级(由低到高为Trace,Debug,Info,Warn,Error,Fatal)

        ${newline}:输出 新的一行

        ${stacktrace}:输出 堆栈信息

        ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}:输出 命名空间.类名.方法名(文件路径:行号)

        ${message}:输出错误信息-->

        <target xsi:type="File" name="AllFile" fileName="${logDirectory}/All.log"

                layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

    </targets>

    <rules>

        <!-- 定义输出日志:

        name="*":记录所有信息

        minlevel="Trace":记录的最低错误级别为Trace

        writeTo="AllFile":日志写入AllFile的target中-->

        <logger name="*" minlevel="Trace" writeTo="AllFile" />

    </rules>

</nlog>

2.将上面的AllFile的target复制3次修改名字为UI、BLL、DAL,添加相应的logger如下代码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

<?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">

    <!-- 定义参数:

    ${basedir}:系统路径

    ${shortdate}:短日期 yyyy-MM-dd(例:2013-01-31)

    ${basedir}/Logs/${shortdate}:即为在系统路径下的Logs文件夹下面的日期文件夹-->

    <variable name="logDirectory" value="${basedir}/Logs/${shortdate}"/>

    <targets>

        <!-- 定义输出模板:

        type="File":这个记录方式为文件类型

        fileName="${logDirectory}/All.log":表示输出到文件All.log中

        layout="...":输出文件中错误的显示格式

        ${logDirectory}:为上述定义的路径

        ${longdate}:输出长日期 yyyy-MM-dd HH:mm:ss.ffff(例:2013-01-31 14:49:21.2120)

        ${level}:错误等级(由低到高为Trace,Debug,Info,Warn,Error,Fatal)

        ${newline}:输出 新的一行

        ${stacktrace}:输出 堆栈信息

        ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}:输出 命名空间.类名.方法名(文件路径:行号)

        ${message}:输出错误信息-->

        <target xsi:type="File" name="AllFile" fileName="${logDirectory}/All.log"

                layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="UI" fileName="${logDirectory}/UI.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="BLL" fileName="${logDirectory}/BLL.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="DAL" fileName="${logDirectory}/DAL.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

    </targets>

    <rules>

        <!-- 定义输出日志:

        name="*":记录所有信息

        minlevel="Trace":记录的最低错误级别为Trace

        writeTo="AllFile":日志写入AllFile的target中-->

        <logger name="*" minlevel="Trace" writeTo="AllFile" />

        <!-- 定义输出日志:

        name="*.UI.*":记录包含.UI.的命名空间的所有信息(第一个*最好替换为固定的,例如我的UI层命名空间为J.UI那么这里就可以写J.UI.*)-->

        <logger name="*.UI.*" minlevel="Trace" writeTo="UI" />

        <logger name="*.BLL.*" minlevel="Trace" writeTo="BLL" />

        <logger name="*.DAL.*" minlevel="Trace" writeTo="DAL" />

    </rules>

</nlog>

3.到这里我们创建一个Class1来测试下,文件内容如下


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

using NLog;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace J.BLL

{

    public class Class1

    {

        private static Logger logger = LogManager.GetCurrentClassLogger();

        public void Test()

        {

            logger.Log(LogLevel.Debug, "this is at BLL Error");

        }

    }

}

4.我们得到的错误信息如下


1

2

3

4

5

6

2013-01-31 14:49:21.3590        ■Debug

    ▲<no type>.lambda_method => HomeController.Index => Class1.Test

    ◇J.BLL.Class1.Test(d:\ProjectTest\J.BLL\Class1.cs:16)

    ◆this is at BLL Error

***************************************************************************

5.输出到文件目前没有问题了,下面就来配置如何连接到MySQL,首先在ProjectLogDB中创建表Logs


1

2

3

4

5

6

7

8

9

10

11

12

13

-- ----------------------------

-- Table structure for `Logs`

-- ----------------------------

DROP TABLE IF EXISTS `Logs`;

CREATE TABLE `Logs` (

  `ID` int(11) NOT NULL AUTO_INCREMENT,

  `CreateDate` datetime NOT NULL,

  `LogLevel` varchar(5) NOT NULL,

  `CallSite` varchar(5000) DEFAULT NULL,

  `Massage` longtext,

  `StackTrace` varchar(5000) DEFAULT NULL,

  PRIMARY KEY (`ID`)

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

6.修改NLog的配置文件如下


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

<?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">

    <!-- 定义参数:

    ${basedir}:系统路径

    ${shortdate}:短日期 yyyy-MM-dd(例:2013-01-31)

    ${basedir}/Logs/${shortdate}:即为在系统路径下的Logs文件夹下面的日期文件夹-->

    <variable name="logDirectory" value="${basedir}/Logs/${shortdate}"/>

    <targets>

        <!-- 定义输出模板:

        type="File":这个记录方式为文件类型

        fileName="${logDirectory}/All.log":表示输出到文件All.log中

        layout="...":输出文件中错误的显示格式

        ${logDirectory}:为上述定义的路径

        ${longdate}:输出长日期 yyyy-MM-dd HH:mm:ss.ffff(例:2013-01-31 14:49:21.2120)

        ${level}:错误等级(由低到高为Trace,Debug,Info,Warn,Error,Fatal)

        ${newline}:输出 新的一行

        ${stacktrace}:输出 堆栈信息

        ${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}:输出 命名空间.类名.方法名(文件路径:行号)

        ${message}:输出错误信息-->

        <target xsi:type="File" name="AllFile" fileName="${logDirectory}/All.log"

                layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="UI" fileName="${logDirectory}/UI.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="BLL" fileName="${logDirectory}/BLL.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="DAL" fileName="${logDirectory}/DAL.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <!-- 定义输出到MySQL中:

        type="Database":这个记录方式是数据库

        dbProvider="MySql.Data.MySqlClient":使用MySQL的连接方式

        connectionString="Server=XXX.XXX.XXX.XXX;Database=ProjectLogDB;Uid=XXX;Pwd=XXX;":数据库的连接字符串

        commandText="insert into Logs(CreateDate,LogLevel,CallSite,Massage,StackTrace) values (@CreateDate,@LogLevel,@CallSite,@Massage,@StackTrace)":insert语句

        <parameter name="CreateDate" layout="${longdate}" />对应到insert语句的参数的值-->

        <target xsi:type="Database" name="AllDatabase" dbProvider="MySql.Data.MySqlClient"

                        connectionString="Server=XXX.XXX.XXX.XXX;Database=ProjectLogDB;Uid=XXX;Pwd=XXX;"

                        commandText="insert into Logs(CreateDate,LogLevel,CallSite,Massage,StackTrace) values (@CreateDate,@LogLevel,@CallSite,@Massage,@StackTrace)">

            <parameter name="CreateDate" layout="${longdate}" />

            <parameter name="LogLevel" layout="${level}" />

            <parameter name="CallSite" layout="${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}" />

            <parameter name="Massage" layout="${message}" />

            <parameter name="StackTrace" layout="${stacktrace}" />

        </target>

    </targets>

    <rules>

        <!-- 定义输出日志:

        name="*":记录所有信息

        minlevel="Trace":记录的最低错误级别为Trace

        writeTo="AllFile,AllDatabase":日志写入AllFile和AllDatabase的target中-->

        <logger name="*" minlevel="Trace" writeTo="AllFile,AllDatabase" />

        <!-- 定义输出日志:

        name="*.UI.*":记录包含.UI.的命名空间的所有信息(第一个*最好替换为固定的,例如我的UI层命名空间为J.UI那么这里就可以写J.UI.*)-->

        <logger name="*.UI.*" minlevel="Trace" writeTo="UI" />

        <logger name="*.BLL.*" minlevel="Trace" writeTo="BLL" />

        <logger name="*.DAL.*" minlevel="Trace" writeTo="DAL" />

    </rules>

</nlog>

7.完整的无说明的配置文件如下


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<?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">

    <variable name="logDirectory" value="${basedir}/Logs/${shortdate}"/>

    <targets>

        <target xsi:type="File" name="AllFile" fileName="${logDirectory}/All.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="UI" fileName="${logDirectory}/UI.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="BLL" fileName="${logDirectory}/BLL.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="File" name="DAL" fileName="${logDirectory}/DAL.log"

            layout="${longdate}        ■${level}${newline}    ▲${stacktrace}${newline}    ◇${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}${newline}    ◆${message}${newline}${newline}***************************************************************************" />

        <target xsi:type="Database" name="AllDatabase" dbProvider="MySql.Data.MySqlClient"

                        connectionString="Server=XXX.XXX.XXX.XXX;Database=ProjectLogDB;Uid=XXX;Pwd=XXX;"

                        commandText="insert into Logs(CreateDate,LogLevel,CallSite,Massage,StackTrace) values (@CreateDate,@LogLevel,@CallSite,@Massage,@StackTrace)">

            <parameter name="CreateDate" layout="${longdate}" />

            <parameter name="LogLevel" layout="${level}" />

            <parameter name="CallSite" layout="${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}" />

            <parameter name="Massage" layout="${message}" />

            <parameter name="StackTrace" layout="${stacktrace}" />

        </target>

    </targets>

    <rules>

        <logger name="*" minlevel="Trace" writeTo="AllFile,AllDatabase" />

        <logger name="*.UI.*" minlevel="Trace" writeTo="UI" />

        <logger name="*.BLL.*" minlevel="Trace" writeTo="BLL" />

        <logger name="*.DAL.*" minlevel="Trace" writeTo="DAL" />

    </rules>

</nlog>

8.数据库中记录如下

三、总结

NLog其实也是一个用起来蛮简单的工具,复杂的功能请到官网查询,以上示例仅供日常使用。

时间: 2024-09-04 10:53:20

NLog 2.0.0.2000 使用实例的相关文章

[ActionScript 3.0] Away3D 官网实例

1 /* 2 3 Dynamic tree generation and placement in a night-time scene 4 5 Demonstrates: 6 7 How to create a height map and splat map from scratch to use for realistic terrain 8 How to use fratacl algorithms to create a custom tree-generating geometry

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)

前两章我为大家详细介绍了如何搭建Maven环境.Spring MVC的流程结构.Spring MVC与Struts2的区别以及示例中的一些配置文件的分析.在这一章,我就对示例的层次结构进行说明,以及MyBatis的一些简单介绍. 本文不会对MyBatis作详细说明,大象还是假定阅读本文的朋友对MyBatis(ibatis)有最基本的了解,只有这样才能较好的理解本文的内容.关于MyBatis请查看它的官方文档及其它参考资料,本文不作详细讨论. 一.工程结构图      上面这是典型的Maven项目

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)

Spring更新到3.0之后,其MVC框架加入了一个非常不错的东西——那就是REST.它的开放式特性,与Spring的无缝集成,以及Spring框架的优秀表现,使得现在很多公司将其作为新的系统开发框架.大象根据实际的项目经验,以之前SSH2例子为基础,对其进行一次大改造,详细的为大家讲解如何实现SSM3全注解式的开发. 这次大象将采取两种构建方式,一是很多人喜欢用的MyEclipse,另一个,则是用Eclipse+Maven.这一篇,将主要讲解开发环境设置与Maven构建方式. 1. 开发环境

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)

在上一篇文章中我详细的介绍了如何搭建maven环境以及生成一个maven骨架的web项目,那么这章中我将讲述Spring MVC的流程结构,Spring MVC与Struts2的区别,以及例子中的一些配置文件的分析. 一.Spring MVC 3.0介绍 Spring MVC是一个典型的MVC框架,是Spring内置的Web框架,可以作为应用项目的展示层,继Spring 2.0对Spring MVC进行重大升级后,Spring 2.5又为Spring MVC引入了注解驱动功能,再到3.0时代,全

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)

这一章大象将详细分析web层代码,以及使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能.     之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使用Spring自带的spring-webmvc组件来实现同样的功能,而且比之以前更简单.另外,还省掉了整合两个框架带来的不稳定因素.     对于Spring MVC框架,我主要讲一下它的常用注解,再结合一些示例进行说明,方便大家能够快速理解.     一.Spring MV

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(五)

这是本系列的最后一篇,主要讲一下FreeMarker模板引擎的基本概念与常用指令的使用方式.     一.FreemMarker基本概念     FreemMarker是一个用Java语言编写的模板引擎,它是一个基于模板来生成文本输出的一个工具.是除了JSP之外被使用得最多的页面模板技术之一,另一个比较有名的模板则是Velocity.     用户可以使用FreeMarker来生成所需要的内容,通常由Java提供数据模型,FreeMarker通过模板引擎渲染数据模型,这样最终得到我们想要的内容.

yii2.0增删改查实例讲解

yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `texture` varchar(50) NOT NULL COMMENT '材质', `mark` varchar(50) NOT NULL COMMENT '牌号', `manufacturers` varchar(100) NOT NULL COMMENT '厂家', `price` int(11) NO

Asp.Net MVC2.0 Url 路由入门---实例篇

本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的View的呢?Controller和Action是怎么解析的?这就是Routing组件干的事情了. Routing的作用:它首先是获取到View传过来的请求,并解析Url请求中Controller和Action以及数据,其次他将识别出来的数据传递给Controller的Action(Controller

[ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)

1 package 2 { 3 import flash.display.Shape; 4 import flash.display.Sprite; 5 import flash.events.MouseEvent; 6 7 /** 8 * @author Frost.Yen 9 * @E-mail [email protected] 10 * @create 2015-7-13 上午11:14:16 11 * 12 */ 13 [SWF(width="800",height=&quo

CentOS7.2中安装JDK1.8.0_102+Tomcat9.0.0.M10

Tomcat是用来解析jsp程序的一个软件,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发而成.因为Tomcat技术先进.性能稳定,而且免费,成为目前比较流行的Web 应用服务器.        Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选.实际上Tomcat 部分是Apache服务器的扩