NLog日志——将日志保存在数据库中

在我上一篇文章NLog日志——将日志保存在文件中,简单的记录了将NLog日志的信息保存在文件中,不过很多时候,一些重要的Error信息,我们可能更希望保存在数据库中。所以我继续按照这个思路,完善了下上次的Demo。

首先要在数据库中新建一个表,用来保存NLog信息,建表语句如下:

USE [TestDB]
GO

/****** Object:  Table [dbo].[Loginfoes]    Script Date: 12/20/2012 11:47:59 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Loginfoes](
	[LogId] [int] IDENTITY(1,1) NOT NULL,
	[CreateOn] [datetime] NOT NULL,
	[Origin] [nvarchar](max) NULL,
	[LogLevel] [nvarchar](50) NULL,
	[Message] [nvarchar](max) NULL,
	[Exception] [nvarchar](max) NULL,
	[StackTrace] [nvarchar](max) NULL
) ON [PRIMARY]

GO


数据库名为TestDB

然后,我们就要在targets中添加如下的target标签:

<target xsi:type="Database" name="database" connectionString="Data Source=.;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=123">
      <commandText>
        insert into Loginfoes([CreateOn],[Origin],[LogLevel], [Message], [Exception],[StackTrace]) values (getdate(), @origin, @logLevel, @message,@exception, @stackTrace);
      </commandText>
      <!--日志来源-->
      <parameter name="@origin" layout="${callsite}"/>
      <!--日志等级-->
      <parameter name="@logLevel" layout="${level}"/>
      <!--日志消息-->
      <parameter name="@message" layout="${message}"/>
      <!--异常信息-->
      <parameter name="@exception" layout="${exception}" />
      <!--堆栈信息-->
      <parameter name="@stackTrace" layout="${stacktrace}"/>
    </target>
其中,简单介绍下connectionString是连接数据库的语句,这个我相信搞过web或者winforms开发的同学都不陌生,commandText标签中是操作数据的sql语句,parameter标签则是参数选项。

OK,接下来我们要在rules标签中添加一个logger,代码如下:

    <logger name="*" minlevel="Debug" writeTo="database"/>
这样儿,只要是Debug级别以上的信息,都会被记录到数据库中,当然,也可以根据个人需要,只记录Fatal Error,其他的一般记录保存在文本文件里。

接下来,就是我们的main方法的方法体了,很简单的一句代码,如下所示:

    logger.Fatal("Fatal Error!");
执行程序,然后我们去数据库中查询下结果,如下图所示:


这样儿,一个简单的NLog日志保存到数据库中的Demo就完成了,如果大家还有更多的需求,请查阅NLog官网的相关文档。

posted @ 2012-12-20 12:23  海盗小dj  阅读(434)  评论(0编辑  收藏  举报