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

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

Install-Package MySql.Data

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

<target xsi:type="Database" 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" 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 layout="yourappname" /> <parameter layout="${date}" /> <parameter layout="${level}" /> <parameter layout="${message}" /> <parameter layout="${identity}" /> <parameter layout="${aspnet-request-host}" /> <parameter layout="${aspnet-request-url:IncludeQueryString=true}" /> <parameter layout="${aspnet-Request-ip}" /> <parameter layout="${logger}" /> <parameter layout="${callsite}" /> <parameter 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

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsjfs.html