在我上一篇文章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官网的相关文档。