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官网的相关文档。