Core 2.0使用Nlog记录日志+Mysql
一、先创建一个Core2.0的项目,并在NuGet中引入3个类库文件
MySql.Data.dll
NLog.dll
NLog.Web.AspNetCore.dll

二、创建一个nlog.config文件。这个文件的属性中的 “复制到输出目录”改为:始终复制
<?xml version="1.0" ?>
<nlog autoReload="true" internalLogFile="file.txt"> 如果日志写入失败,会把错误写入此文件
<targets>
<target type="Database" dbProvider="MySql.Data.MySqlClient.MySqlConnection, MySql.Data"
name="database" connectionstring="Data Source=XXXXXXXXX;initial catalog=log;user id=XXXXX;password=XXXXX;SslMode=none">
<commandText>
INSERT INTO logs(Date,Thread,Level,Logger,Message,domain,errortype) VALUES (@log_date, @thread, @log_level, @logger, @message,@domain,@errortype)
</commandText> <parameter name="@log_date" layout="${event-context:item=log_date}" />
<parameter name="@thread" layout="${event-context:item=thread}" />
<parameter name="@log_level" layout="${event-context:item=log_level}" />
<parameter name="@logger" layout="${event-context:item=logger}" />
<parameter name="@message" layout="${event-context:item=message}" />
<parameter name="@domain" layout="${event-context:item=domain}" />
<parameter name="@errortype" layout="${event-context:item=errortype}" /> </target>
</targets>
<rules>
<logger name="*" minlevel="Debug" appendTo="database" />
</rules>
</nlog>
nlog.config文件说明:
<targets />声明目标
<rules />声明规则
(1)路由规则详情(rules):
<rules />区域定义了日志的路由规则。每一个路由表项就是一个<logger />元素。<logger />有以下属性: name - 日志源/记录者的名字 (允许使用通配符*)
minlevel - 该规则所匹配日志范围的最低级别
maxlevel - 该规则所匹配日志范围的最高级别
level - 该规则所匹配的单一日志级别
levels - 该规则所匹配的一系列日志级别,由逗号分隔。
writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。
final - 标记当前规则为最后一个规则。其后的规则即时匹配也不会被运行。
如:
1、名字空间Name.Space下的Class1这个类的所有级别等于或者高于Debug的日志信息都写入到“f1”这个目标里。
<logger name="Name.Space.Class1" minlevel="Debug" writeTo="f1" />
2、名字空间Name.Space下的Class1这个类的所有级别等于Debug或Error的日志信息都写入到“f1”这个目标里。
<logger name="Name.Space.Class1" levels="Debug,Error" writeTo="f1" />
3、名字空间Name.Space下所有类的所有级别的日志信息都写入到“f3”和“f4”这两个目标里。
<logger name="Name.Space.*" writeTo="f3,f4" />
4、 名字空间Name.Space下所有类的、级别在Debug和Error之间的(包括Debug,Info,Warn,Error) 日志信息都不会被记录(因为这条规则没有定义writeTo),
同时其它后续规则也都会被忽略(因为这里设置了final="true")。
<logger name="Name.Space.*" minlevel="Debug" maxlevel="Error" final="true" />
(2)自动再配置:
听起来确实挺不好理解的。但是确实也没什么。换句简单的话来说,当我们一旦启动程序,这时候NLog.config文件被读取后,知道程序再启动都不会再读取配置文件了。假如我们不想停掉程序,比如说服务器哪能说停就停哈。这就用上这个配置了,这个配置功能是,一旦你对配置文件修改,程序将会重新读取配置文件,也就是自动再配置。直接上代码:
<nlog autoReload="true">
...
</nlog>
(3)日志排错
<nlog throwExceptions="true" />
<nlog internalLogFile="file.txt" />- 设置internalLogFile属性可以让NLog把内部的调试和异常信息都写入指定文件里。
<nlog internalLogLevel="Trace|Debug|Info|Warn|Error|Fatal" /> - 决定内部日志的级别,级别越高,输出的日志信息越简洁。
<nlog internalLogToConsole="false|true" /> - 是否把内部日志输出到标准控制台。
<nlog internalLogToConsoleError="false|true" /> - 是否把内部日志输出到标准错误控制台 (stderr)。
设置throwExceptions属性为“true”可以让NLog不再阻挡这类异常,而是把它们抛给调用者。在部署是这样做可以帮我们快速定位问题。一旦应用程序已经正确配置了,
我们建议把throwExceptions的值设为“false”,这样由于日志引发的问题不至于导致应用程序的崩溃
(4)异步处理,使其具备异步处理能力
<nlog>
<targets async="true">
<!-- all targets in this section will automatically be asynchronous -->
</targets>
</nlog>
三、修改Startup文件,添加 ILoggerFactory loggerFactory
public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
{
//新天加的日志配置
loggerFactory.AddNLog();
env.ConfigureNLog("nlog.config"); if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseStaticFiles(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
修改program文件,添加配置UseNlog()

四、开始添加内容
static NLog.ILogger logger = NLog.LogManager.GetCurrentClassLogger();
public IActionResult Index()
{
LogEventInfo log = new LogEventInfo();
log.Properties["log_level"] = "";
log.Properties["log_date"] = DateTime.Now;
log.Properties["thread"] = ;
log.Properties["logger"] = "big";
log.Properties["domain"] = "www.xiaoyaodijun.com";
log.Properties["message"] = "时光悠悠,碧水长流";
log.Properties["errortype"] = "core .server";
logger.Debug(log);
return View();
}
五、可以直接在数据库看结果了

配置参考来源:https://www.cnblogs.com/fuchongjundream/p/3936431.html
Core 2.0使用Nlog记录日志+Mysql的更多相关文章
- .net core 2.0+superui +Dapper.SimpleCRUD+mysql+NLog
**_ .net core 2.0+superui +Dapper.SimpleCRUD+mysql+NLog _** 前端框架 superui http://www.supermgr.cn/ 1.组 ...
- EF Core使用SQL调用返回其他类型的查询 ASP.NET Core 2.0 使用NLog实现日志记录 CSS 3D transforms cSharp:use Activator.CreateInstance with an Interface? SqlHelper DBHelper C# Thread.Abort方法真的让线程停止了吗? 注意!你的Thread.Abort方法真
EF Core使用SQL调用返回其他类型的查询 假设你想要 SQL 本身编写,而不使用 LINQ. 需要运行 SQL 查询中返回实体对象之外的内容. 在 EF Core 中,执行该操作的另一种方法 ...
- .net Core 2.0使用NLog
最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不同的日志,进行不同的记录,分别有系统运行日志,和个人在程序中写的异常日志.发布之后放在了IIS上.进行查看日志的信息 参考了两篇 ...
- .net core 2.0使用NLog写日志文件
原文地址:传送门 之前也看了 linezero 大佬写的教程,但是总是没有成功写入日志文件.按照 曲廉卿 的已成功,以下正文: 最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不 ...
- ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...
- .net core 3.1 使用nlog记录日志 NLog.Web.AspNetCore
背景 .net core 中已经集成了log的方法, 但是只能控制台输出不能写入文件等等. 常见第三方的的日志工具包括log4net, nlog等等, 本文介绍nlog 一. 引用程序集, nuget ...
- ASP.NET Core 2.0 使用NLog实现日志记录
1.安装NuGet包 1.Install-Package NLog.Web.AspNetCore 2.Install-Package NLog 在csproj中编辑: <PackageRefer ...
- .net core 2.0 Unable to convert MySQL date/time to System.DateTime
解决方案 在连接字符串加入convert zero datetime=True
- 基于.net core 2.0+mysql+AceAdmin搭建一套快速开发框架
前言 .net core已经出来一段时间了,相信大家对.net core的概念已经很清楚了,这里就不再赘述.笔者目前也用.net core做过一些项目,并且将以前framework下的一些经验移植到了 ...
随机推荐
- did not finish being created even after we waited 189 seconds or 61 attempts. And its status is downloading
did not finish being created even after we waited 189 seconds or 61 attempts. And its status is down ...
- Sql知识点总结
一.数据库对象:表(table) 视图(view) 序列(sequence) 索引(index) 同义词(synonym) 视图(view) : 存储起来的 select 语句 create view ...
- echarts 折线图自定义颜色与修改legend颜色
option4 = { title : { text: '', subtext: '' }, color:['#2db7f5','#ff6600','#808bc6'], //关键加上这句话 ...
- ubuntu上安装multi-mechanize步骤
第一步:先安装pip pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工 ...
- 数据库基础——跟着【克里斯学SQL】哈哈。
前言: 很多同学呀,对数据库的操作仅仅只能在于Navicat 等第三方可视化的工具上面!!!! 这是可怕的,数据库的操作十分的重要,甚至,他是程序最重要的部分. 面试经常问题, 了解那个数据? 写一个 ...
- libiconv交叉编译提示arm-none-linux-gnueabi-gcc
title: libiconv交叉编译提示arm-none-linux-gnueabi-gcc date: 2019/3/6 17:45:48 toc: true --- libiconv交叉编译提示 ...
- Angular+Ionic+RSA实现后端加密前端解密功能
因业务需要,需要给android应用安装证书,通过读取证书文件内容实现某些功能的控制: 流程:后台通过publicKey对指定内容的文件进行加密,生成文件共客户下载,客户下载后选择该证书文件读取到应用 ...
- Mongodb分片集群技术+用户验证
随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...
- [Luogu P1119]灾后重建
这是一道考Floyd本质的题. 回忆一下Floyd的原理,三层循环,最外层循环枚举的是中转点,也就是用两点到中转点距离之和来更新最短路.然后来看下题目,重建时间是按照从小到大排序的,也就是说,当第i个 ...
- redis---------AOF文件异常导致的redis无法载入
AOF损坏时的对策1.若在写AOF文件时Server崩溃则可能导致AOF文件损坏而不能被Redis载入.可通过如下步骤修复: 创建一个AOF文件的备份: cp appendonly.aof appen ...