NLog除了可以向控制台、本地文件中写入日志外,还支持向数据库中记录日志,其支持的数据库类型包括Oracle,、MySql、SqlLite等数据库,本文介绍如何配置NLog使其将日志记录到MySql数据库。
将日志写入MySql数据库,只需在nlog.config的targets和rules节配置与数据库相关的输出目标及输出规则即可。
如下面示例所示,在nlog.config的targets节中新增目标对象,定义其类型为Database,同时需指定数据库提供器(database provider),不同的数据库类型使用的值不同,参考文献6中列出了连接常用数据库使用的dbProvider示例。provider指定的package需要在项目中引用。
然后还需要指定数据库连接字符串,这个没什么好解释的。
接下来列出commandText,一般是SQL语句或者是存储过程调用,本文示例配置来自参考文献1,测试时先在数据库中创建log表,然后在commandText中指定SQL语句,并用多个parameter指定SQL语句中的属性值的赋值规则。
<target name="database" xsi:type="Database" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" connectionString="server=127.0.0.1;uid=XXX;pwd=XXXXXXX;database=RazorPagesMovie;SslMode=none" >
<commandText>
insert into log
(Application, Logged, Level, Message,Logger, CallSite, Exception)
values (@Application, @Logged, @Level, @Message,@Logger, @Callsite, @Exception);
</commandText>
<parameter name="@application" layout="NLogDemo" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@callSite" layout="${callsite:filename=true}" />
<parameter name="@exception" layout="${exception:tostring}" />
</target>
</targets>
接着定义输出规则,即在rules中指定哪些日志记录器(logger)的日志输出到数据库中。需要输出到数据库的logger,需在writeto属性中包含数据库的target名称。同时logger的name属性定义哪些符合规则logger产生的日志可以记录到数据库中,name属性可以使用*和?通配符。如下所示,下面配置的意思是名称以TestMVCMySql.Controllers.开头的所有logger的Info级别及以上级别的日志记录到数据库中。
<rules>
<logger name="TestMVCMySql.Controllers.*" minlevel="Info" writeTo="database" />
</rules>
在nlog.config中配置好后,运行之前的电影数据维护项目即可将日志记录到数据库,效果如下图所示:
参考文献:
[1]https://blog.csdn.net/zhaobw831/article/details/81568747
[2]https://www.cnblogs.com/xxaxx/p/8595552.html
[3]https://www.cnblogs.com/xiaoyaodijun/p/9290200.html
[4]https://github.com/nlog/nlog/wiki/Configuration-file
[5]https://github.com/NLog/NLog/wiki/Database-target
[6]https://github.com/NLog/NLog/wiki/Database-target#dbprovider-examples