ASP.NET Core项目中使用NLog记录操作日志(续:输出到mysql数据库)

  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

猜你喜欢

转载自blog.csdn.net/gc_2299/article/details/121481828