Asp.Net Core使用NLog+Mysql的几个小问题

项目中使用NLog记录日志,很好用,之前一直放在文本文件中,准备放到db中,方便查询。

项目使用了Mysql,所以日志也放到Mysql上,安装NLog不用说,接着你需要安装Mysql.Data安装包:

Install-Package MySql.Data

接着打开你的NLog,新增一个target

<target xsi:type="Database"
    name="mysqlDb"
    dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
    connectionString="Server=127.0.0.1;User Id=root;Password=root;Database=nlog;Character Set=utf8;SslMode=none;" />

如果你的数据库连接不支持SSL的话(开发机一般都没有吧),一定要加上SslMode=none

接着你需要创建数据库和表,建议你手动去mysql执行脚本,如果想自动创建的话,你可以查看这里

创建数据库脚本:

 CREATE TABLE `log` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Application` varchar(50) DEFAULT NULL,
  `Logged` datetime DEFAULT NULL,
  `Level` varchar(50) DEFAULT NULL,
  `Message` text DEFAULT NULL,
  `UserName` varchar(512) Default Null,
  `ServerName` text Default Null,
  `Url` text NULL,
  `RemoteAddress` nvarchar(100) NULL,
  `Logger` text DEFAULT NULL,
  `Callsite` text DEFAULT NULL,
  `Exception` text DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

然后修改下NLog中刚刚我们添加的target:

<target xsi:type="Database"
            name="mysqlDb"
            dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
            connectionString="Server=127.0.0.1;User Id=root;Password=root;Database=nlog;Character Set=utf8;SslMode=none;">
      
  <commandText>
     insert into log (
        Application, Logged, Level, Message,
        Username,
        ServerName, Url,RemoteAddress,
        Logger, CallSite, Exception
        ) values (
        @Application, @Logged, @Level, @Message,
        @Username,
        @ServerName, @Url,@RemoteAddress,
        @Logger, @Callsite, @Exception
    );
  </commandText>

  <parameter name="@application" layout="yourappname" />
  <parameter name="@logged" layout="${date}" />
  <parameter name="@level" layout="${level}" />
  <parameter name="@message" layout="${message}" />
  <parameter name="@username" layout="${identity}" />
  <parameter name="@serverName" layout="${aspnet-request-host}" />
  <parameter name="@url" layout="${aspnet-request-url:IncludeQueryString=true}" />
  <parameter name="@remoteAddress" layout="${aspnet-Request-ip}" />
  <parameter name="@logger" layout="${logger}" />
  <parameter name="@callSite" layout="${callsite}" />
  <parameter name="@exception" layout="${exception:tostring}" />
    
</target>

可以看到在commandText中是添加日志的sql语句,下面就是各参数的值,使用的默认[layout]((https://github.com/NLog/NLog/wiki/Layout-Renderers),你也可以自定义layout

现在你可以启动你的项目,执行没有问题,但是在上述aspnet-request开头的一些值没有获取到,都为空,这是因为没有安装NLog.Web包,使用Nuget或者在Nuget控制台输入:

Install-Package NLog.Web

再次运行,你会看到你的日志中已经记录的很全面了。

之前很久没写,觉得很多没必要写,但现在发现,还是记录下来比较好,或许对你有用呢,对吧!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

使用带dblink方式的datapump迁移Oracle 10g到11g

      对于从Oracle 10g下迁移数据库到Oracle 11g,除了使用RMAN方式之外,我们可以使用带dblink的datapump方式来实现基于逻...

8910
来自专栏Jerry的SAP技术分享

如何利用BAPI SD_SALESDOCUMENT_CHANGE修改一个Sales Order的字段

假设我想修改S/4HANA里Sales Order抬头的Service Date字段SERV_DATE:

8930
来自专栏乐沙弥的世界

数据导入时遭遇 ORA-01187 ORA-01110

最近的数据导入(IMP)时碰到了ORA-01187 ORA-01110 错误,由于这个数据库是使用热备恢复过来的,且恢复也是成功的,因为数据库能够成功open,...

10330
来自专栏乐沙弥的世界

Oracle 联机重做日志文件(ONLINE LOG FILE)

--=========================================

13720
来自专栏SpringBoot 核心技术

第七章:使用QueryDSL与SpringDataJPA实现子查询

45910
来自专栏杨建荣的学习笔记

关于oracle invalid components问题的解决(28天)

升级生产的DB,有一些预检查条件,这些需要提前修复,以便在升级的时候不会成为影响进度的绊脚石。 生产中的components有一些显示是invalid状态,从d...

39440
来自专栏日暮星辰

使用Percona安装tokudb存储引擎

由分形树索引支持的PerconaTokuDB®是一款开源的,用于Percona Server的高性能存储引擎,可提高可扩展性和运行效率。专为满足大数据应用的苛刻...

22720
来自专栏「3306 Pai」社区

《那些年,我在乙方的日子 -- 神谕篇NO1》

某个夏日的午后,窗外知了在大声鸣叫。而我却在睡梦中跟基友一起吃鸡,正准备抢空投时 。手机突然铃声响起,惊醒后一看是领导电话,一下子回到了现实中。心想又得去公司吃...

19920
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system2.c 新增滚动条功能

新添加的滚动条功能,首先就是要在createWindow的时候,修改参数风格模式 hwnd = CreateWindow (szAppName, TE...

23390
来自专栏xingoo, 一个梦想做发明家的程序员

IOCP模型TCP服务器

主线程创建监听套接字,创建额外工作线程,关联IOCP,负责等待和接受到来的连接。 调用GetQueuedCompletionStatus函数,函数返回: 1 调...

26970

扫码关注云+社区

领取腾讯云代金券