NLog 输出到数据库

日志记录库

NLog是一个功能强大且易于使用的.NET日志记录库,适用于各种.NET平台,包括.NET Core。它提供了完善的跟踪调试代码功能,并且可以灵活配置其表现样式后发送到一个或多个输出目标中。
NLog的重点是高性能易于使用易于扩展灵活配置

官网地址
文档地址

1.设置存放日志数据库

CREATE DATABASE TestNlog
use TestNlog

CREATE table _Nlog(
MachineName VARCHAR(200),
Logged VARCHAR(200),
Level VARCHAR(200),
Message FULLTEXT,
Logger VARCHAR(200),
Callsite VARCHAR(200),
Exception VARCHAR(200)
)

2.添加NuGet包

在这里插入图片描述

NLog  --.net 使用这个包

NLog.WebAspNetCore -- .net Core才使用这个包

-- 以下是将日志写入到数据库中需要的包

NLog.Database -- 不管什么数据库都需要

以下是根据所需数据库需要的包
数据库所需要的包数据库的dbProvider配置数据库连接字符串
sql serverMicrosoft.Data.SqlClientdbProvider=“Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient”connectionString=“Server=服务器;Database=数据库;User Id=用户名;Password=密码;”
MysqlMySql.DatadbProvider=“MySql.Data.MySqlClient.MySqlConnection, MySql.Data”connectionString=“server=服务器;userid=用户名;pwd=密码;port=3306;database=数据库;sslmode=none”
oracleOracle.ManagedDataAccess.coredbProvider=“Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess”connectionString=“Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));User Id=用户名;Password=密码;”

3.新建Nlog.config(自定义名.config)文件

项目 右键-添加-新建项
在这里插入图片描述

<!--直接全部粘贴复制-->
<?xml version="1.0" encoding="utf-8" ?>
<!-- autoReload属性,true时,如果NLog.config文件有变动,会自动应用新配置(但是会有延迟,过几秒才会应用起来)
internalLogLevel属性,设定后,输出的是NLog内部自己的日志记录,如果遇到NLog异常/配置文件没配好,可以把Off改为Trace或Debug来查看NlogRecords.log里的内容
internalLogFile属性,可以设定路径,例如默认的D:\Logs\aspNet.log
 -->
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
	<!-- internalLogFile 日志文件存放路径 -->
	<!-- variable 声明变量 使用 "${myvar}" -->
	<variable name="myvar" value="myvalue"/>
	<!--  存放日志目标  -->
	<targets>
		<!-- 
    xsi:type="File":写入txt
    fileName是写入文件的文件名并按日期添加后缀
    layout属性是写入日志的格式 
    name是决定 logger标签的writeTo的值
    -->
		<!-- 控制台输出 -->
		<!--<target name="console" xsi:type="Console" layout="${longdate}|${level}|${message}"/>-->
		<!--输出到文件上-->
		<!--<target name="f" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate}|${level}|${message}" />-->
		<!--通过数据库记录日志 配置
    dbProvider请选择mysql或是sqlserver,同时注意连接字符串,需要安装对应的sql数据提供程序
    -->
		<!-- 连接 sql server数据库 connectionString 连接字符串 commandText执行添加的sql语句 -->
		<target name="database" xsi:type="Database"
		dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
	 connectionString="server=127.0.0.1;userid=root;pwd=123456;port=3306;database=TestNlog;sslmode=none"
		  commandText="insert into _Nlog (MachineName, Logged, Level, Message,Logger, Callsite, Exception) values (@MachineName, @Logged, @Level, @Message,@Logger, @Callsite, @Exception);">

			<parameter name="@MachineName" layout="${machinename}" />
			<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}" />
			<parameter name="@Exception" layout="${exception:tostring}" />
		</target>
	</targets>
	<rules>
		<!-- 第一个logger配置跳过所有Microsoft日志记录,final 属性是否为最后一个规则,如果为true,其后的规则即便被匹配也不会被运行。
第二个logger name="logdb",该日志记录器名为logdb,是适配log_database规则,即写入数据库,如果要适配多条规则,用逗号隔开 -->
		<!--跳过所有级别的Microsoft组件的日志记录-->
		<!--<logger name="Microsoft.*" final="true" />-->
		<!-- BlackHole without writeTo -->
		<!--只通过数据库记录日志,如果给了name名字,cs里用日志记录的时候,取logger需要把name当做参数 minlevel最低等级-->
		<!--<logger name="*" minlevel="Info"  writeTo="console"/>-->
		<!--<logger name="*" minlevel="Info"  writeTo="f"/>-->
		<!--至少Info级别以上:写入数据库-->
		<logger name="*" minlevel="Info" writeTo="database" />
	</rules>
</nlog>

在这里插入图片描述默认存储log文件的地址是 项目文件\bin\Debug\net6.0\logs
targets 标签 配置输出类型 链接数据库的配置
在这里插入图片描述

在这里插入图片描述

nlog输出类型详解

$ {cached} - 将缓存应用于另一个布局输出。
$ {db-null} - 为数据库渲染DbNull
$ {exception} - 通过调用Logger方法之一提供的异常信息
$ {level} - 日志级别(例如ERROR,DEBUG)或级别序数(数字)
$ {literal} - 字符串文字。(文本)-有用,以逃避括号
$ {logger} - 记录器名称。GetLogger,GetCurrentClassLogger等
$ {message} - (格式化的)日志消息。
$ {newline} - 换行文字。
$ {object-path} - 渲染对象的(嵌套)属性
$ {onexception} - 仅在为日志消息定义了异常时才输出内部布局。
$ {var} - 渲染变量

呼叫站点和堆栈跟踪-------------------------------------------------------------
$ {callsite} - 调用站点(类名,方法名和源信息)
$ {callsite-linenumber} - 呼叫站点源行号。
$ {stacktrace} - 渲染堆栈跟踪

条件------------------------------------------------------------------------
$ {when} - 仅在满足指定条件时输出内部布局。
$ {whenempty} - 当内部布局产生空结果时,输出替代布局。

上下文信息-------------------------------------------------------------------
$ {activityid} - 将System.Diagnostics跟踪关联ID记录到日志中。
$ {all-event-properties} - 记录所有事件上下文数据。
$ {event-context} - 记录事件属性数据-替换为$ {event-properties}
$ {event-properties} - 记录事件属性数据-重命名$ {event-context}
$ {gdc} - 全局诊断上下文项。包含每个应用程序实例值的字典结构。
$ {install-context} - 安装参数(传递给InstallNLogConfig)。
$ {mdc} - 映射诊断上下文-线程局部结构。
$ {mdlc} - 异步映射诊断上下文-线程局部结构。MDC的异步版本
$ {ndc} - 嵌套诊断上下文-线程局部结构。
$ {ndlc} - 异步嵌套诊断上下文-线程本地结构。

专柜-----------------------------------------------------------------------
$ {counter} - 一个计数器值(在每个布局渲染中增加)
$ {guid} - 全局唯一标识符(GUID)。
$ {sequenceid} - 日志序列号

日期和时间------------------------------------------------------------------
$ {date} - 当前日期和时间。
$ {longdate} - 日期和时间,采用可排序的长格式yyyy-MM-dd HH:mm:ss.ffff
$ {qpc} - 高精度计时器,基于QueryPerformanceCounter返回的值。
$ {shortdate} - 短日期,格式为yyyy-MM-dd。
$ {ticks} - 当前日期和时间的“ Ticks”值。
$ {时间} - 在24小时,可排序的格式HH的时间:MM:ss.mmm。

编码和字符串转换--------------------------------------------------------------
$ {json-encode} - 使用JSON规则转义另一个布局的输出。
$ {left} - 文字的左半部分
$ {小写} - 将另一个布局输出的结果转换为小写。
$ {norawvalue} - 防止将另一个布局渲染器的输出视为原始值
$ {pad} - 将填充应用于另一个布局输出。
$ {replace} - 将另一个布局的输出中的字符串替换为另一个字符串。正则表达式可选
$ {replace-newlines} - 用另一个字符串替换换行符。
$ {right} - 文字的右侧
$ {rot13} - 使用ROT-13解码“加密”的文本。
$ {substring} - 文本的子字符串
$ {trim-whitespace} - 从另一个布局渲染器的结果修剪空白。
$ {uppercase} - 将另一个布局输出的结果转换为大写。
$ {url-encode} - 编码另一个布局输出的结果,以供URL使用。
$ {wrapline} - 以指定的行长包装另一个布局输出的结果。
$ {xml-encode} - 将另一个布局输出的结果转换为XML兼容的。

环境和配置文件----------------------------------------------------------------
$ {appsetting} -. config文件 NLog.Extended中的应用程序配置设置
$ {configsetting} - 来自appsettings.json或ASP.NET Core和.NET Core中其他配置的值 NLog.Extensions.Logging NLog.Extensions.Hosting NLog.Web.AspNetCore
$ {environment} - 环境变量。(例如PATH,OSVersion)
$ {environment-user} - 用户身份信息(用户名)。
$ {}注册表 - 从Windows注册表中的值。

文件和目录--------------------------------------------------------------------
$ {basedir} - 当前应用程序域的基本目录。
$ {currentdir} - 应用程序的当前工作目录。
$ {file-contents} - 呈现指定文件的内容。
$ {filesystem-normalize} - 通过将文件名替换为安全字符来过滤文件名中不允许的字符。
$ {} nlogdir - 其中NLog.dll所在的目录。
$ {specialfolder} - 系统专用文件夹路径(包括“我的文档”,“我的音乐”,“程序文件”,“桌面”等)。
$ {tempdir} - 临时目录。

身分识别----------------------------------------------------------------------
$ {identity} - 线程身份信息(名称和身份验证信息)。
$ {windows-identity} - 线程Windows身份信息(用户名)
$ {windows-identity} - 线程Windows身份信息(用户名) Nlog.WindowsIdentity

整合方式----------------------------------------------------------------------
$ {gelf} - 将日志转换为GELF格式 NLog.GelfLayout 外部
$ {log4jxmlevent} - 与log4j,Chainsaw和NLogViewer兼容的XML事件描述。

进程,线程和程序集--------------------------------------------------------------
$ {appdomain} - 当前的应用程序域。
$ {assembly-version} - 默认应用程序域中可执行文件的版本。
$ {gc} - 有关垃圾收集器的信息。
$ {hostname} - 运行该进程的计算机的主机名。
$ {local-ip} - 来自网络接口的本地IP地址。
$ {machinename} - 运行进程的计算机名。
$ {performancecounter} - 性能计数器。
$ {processid} - 当前进程的标识符。
$ {processinfo} - 有关正在运行的进程的信息。例如StartTime,PagedMemorySize
$ {processname} - 当前进程的名称。
$ {processtime} - 格式为HH:mm:ss.mmm的处理时间。
$ {threadid} - 当前线程的标识符。
$ {threadname} - 当前线程的名称。

Silverlight------------------------------------------------------------------------
$ {document-uri} - 承载当前Silverlight应用程序的HTML页面的URI。
$ {sl-appinfo} - 有关Silverlight应用程序的信息。

Web,ASP.NET和ASP.NET Core----------------------------------------------------------
$ {ASPNET-appbasepath} - ASP.NET应用程序的基本路径(内容根) NLog.Web NLog.Web.AspNetCore
$ {ASPNET应用} - ASP.NET应用程序变量。 网络日志
$ {ASPNET环境} - ASP.NET环境名称 NLog.Web.AspNetCore
$ {ASPNET项} - ASP.NETHttpContext项变量。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET-MVC-行动} - ASP.NET MVC动作名称 NLog.Web NLog.Web.AspNetCore
$ {ASPNET-MVC控制器} - ASP.NET MVC控制器名称 NLog.Web NLog.Web.AspNetCore
$ {ASPNET请求} - ASP.NET请求变量。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET-请求的contentType} - ASP.NET Content-Type头(实施例应用/ JSON) NLog.Web.AspNetCore
$ {ASPNET请求,饼干} - ASP.NET请求的cookie的内容。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET请求形式} - ASP.NET请求表的内容。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET请求报头} - ASP.NET部首键/值对。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET请求主机} - ASP.NET请求主机。 NLog.Web NLog.Web.AspNetCore
$ {aspnet-request-ip} - 客户端IP。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET请求-方法} - ASP.NET请求方法(GET,POST等)。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET请求,贴体} - ASP.NET贴体/净荷 NLog.Web NLog.Web.AspNetCore
$ {ASPNET-请求的查询字符串} - ASP.NET请求的查询字符串。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET,请求引荐} - ASP.NET请求引用。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET请求的URL} - ASP.NET请求URL。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET请求,用户代理} - ASP.NET请求用户代理。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET-响应的StatusCode} - ASP.NET响应状态代码的内容。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET会话} - ASP.NET Session变量。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET-的SessionID} - ASP.NET会话ID的变量。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET-traceidentifier} - ASP.NET跟踪标识 NLog.Web NLog.Web.AspNetCore
$ {ASPNET用户-的authType} - ASP.NET用户验证。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET用户身份} - ASP.NET用户变量。 NLog.Web NLog.Web.AspNetCore
$ {ASPNET用户-isauthenticated} - ASP.NET用户身份验证? NLog.Web NLog.Web.AspNetCore
$ {ASPNET-webrootpath} - ASP.NET Web根目录路径(wwwroot文件) NLog.Web NLog.Web.AspNetCore
$ {iis-site-name} - IIS网站的名称。 NLog.Web NLog.Web.AspNetCore

在这里插入图片描述rules 真正输出配置

日志等级排序 自上而下,等级递增:
Trace - 最常见的记录信息,一般用于普通输出
Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
Info - 信息类型的消息
Warn - 警告信息,一般用于比较重要的场合
Error - 错误信息
Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。

4.配置program.cs文件

在这里插入图片描述

using NLog.Web;

//nlog日志文件
// 加载Nlog配置文件 (名字为需要读取的配置文件的文件名) 注意这里的AddNLog方法会引起NLog和NLog.WebAspNetCore冲突,使用NLog.Web命名空间即可
builder.Logging.AddNLog("Nlog.config"); 

自定义错误信息提示
//info自定义错误信息提示
_logger.LogInformation("------------------------Info---------------------");

//error 提示
_logger.LogError("------------------------Error---------------------");

//warn提示
_logger.LogWarning("------------------------Warning---------------------");

运行代码

运行成功后,会将设定后的级别及以上的日志信息存放在数据库中了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值