站长网_站长创业_站长主页_站长之家_易采站长站

会员投稿 投稿指南 站长资讯通告: NLog路由规则和上下文信息知识点总结
搜索:
您的位置: 主页 > 教程 > 网页编程 > ASP.NET > » 正文

Asp.Net Core用NLog记录日志操作方法

来源: 易采站长站

需求

1.日志自动写入到数据库、写入到文件

2.appsettings.json数据库连接更改后,不需要去改NLog中的连接地址,启动网站或项目时自动检测变动然后去更改,以appsettings.json为准,保持同步。

3.写入日志时,除了NLog自带的字段,新增LogType自定义字段记录日志类型,例如网站日志、中间件日志等

4.统一的写日志方法,不用每次get一个logger对象(或依赖注入)来记日志

安装包

在nuget中安装NLogNLog.Web.AspNetCore ,这两个是NLog相关的包。

还需要安装NLog写入数据库的数据库适配器,我这里写入到MySQL数据库,所以安装MySql.Data

如果是写入到SQL server数据库,需要安装Microsoft.Data.SqlClient

NLog.config 配置文件内容

网站根目录下新建NLog.config配置文件,记得右击该文件“属性”,复制到输出目录:“始终复制”

NLog.config文件内容:

<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 autoReload="true" 
 throwExceptions="false" 
 internalLogLevel="Off" 
 internalLogFile="NlogRecords.log">
 <!--Nlog内部日志记录为Off关闭。除非纠错,不可以设为Trace否则速度很慢,起码Debug以上-->
 <extensions>
 <add assembly="NLog.Web.AspNetCore" />
 </extensions>
 <targets>
 <!--通过数据库记录日志 配置
 dbProvider请选择mysql或是sqlserver,同时注意连接字符串,需要安装对应的sql数据提供程序
 MYSQL:
 dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
 connectionString="server=localhost;database=BaseMIS;user=root;password=123456"
 MSSQL:
 dbProvider="Microsoft.Data.SqlClient"
 connectionString="Server=127.0.0.1;Database=BaseMIS;User ID=sa;Password=123456"
 -->
 <target name="log_database" xsi:type="Database" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
  connectionString="server=192.168.137.10;database=TestNLog;user=root;password=mysql@local">
 <commandText>
 INSERT INTO TblLogrecords 
 (LogDate,LogLevel,LogType,Logger,Message,MachineName,MachineIp,NetRequestMethod
 ,NetRequestUrl,NetUserIsauthenticated,NetUserAuthtype,NetUserIdentity,Exception)
 VALUES
 (@LogDate,@LogLevel,@LogType,@Logger,@Message,@MachineName,@MachineIp,@NetRequestMethod
 ,@NetRequestUrl,@NetUserIsauthenticated,@NetUserAuthtype,@NetUserIdentity,@Exception);
 </commandText>
 <parameter name="@LogDate" layout="${date}" />
 <parameter name="@LogLevel" layout="${level}" />
 <parameter name="@LogType" layout="${event-properties:item=LogType}" />
 <parameter name="@Logger" layout="${logger}" />
 <parameter name="@Message" layout="${message}" />
 <parameter name="@MachineName" layout="${machinename}" />
 <parameter name="@MachineIp" layout="${aspnet-request-ip}" />
 <parameter name="@NetRequestMethod" layout="${aspnet-request-method}" />
 <parameter name="@NetRequestUrl" layout="${aspnet-request-url}" />
 <parameter name="@NetUserIsauthenticated" layout="${aspnet-user-isauthenticated}" />
 <parameter name="@NetUserAuthtype" layout="${aspnet-user-authtype}" />
 <parameter name="@NetUserIdentity" layout="${aspnet-user-identity}" />
 <parameter name="@Exception" layout="${exception:tostring}" />
 </target>
 <target name="log_file" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" 
  layout="${longdate} | ${level:uppercase=false} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />
 </targets>
 <rules>
 <!--跳过所有级别的Microsoft组件的日志记录-->
 <logger name="Microsoft.*" final="true" />
 <!-- BlackHole without writeTo -->
 <!--只通过数据库记录日志,如果给了name名字,cs里用日志记录的时候,取logger需要把name当做参数-->
 <logger name="logdb" writeTo="log_database" />
 <logger name="logfile" writeTo="log_file" />
 </rules>
</nlog>
            
最新图文资讯
1 2 3 4 5 6
相关文章列表:
易采站长站 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助 -