一、先创建一个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的更多相关文章

  1. .net core 2.0+superui +Dapper.SimpleCRUD+mysql+NLog

    **_ .net core 2.0+superui +Dapper.SimpleCRUD+mysql+NLog _** 前端框架 superui http://www.supermgr.cn/ 1.组 ...

  2. 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 中,执行该操作的另一种方法 ...

  3. .net Core 2.0使用NLog

    最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不同的日志,进行不同的记录,分别有系统运行日志,和个人在程序中写的异常日志.发布之后放在了IIS上.进行查看日志的信息 参考了两篇 ...

  4. .net core 2.0使用NLog写日志文件

    原文地址:传送门 之前也看了 linezero 大佬写的教程,但是总是没有成功写入日志文件.按照 曲廉卿 的已成功,以下正文: 最近研究了一下NLog的使用方式,简单的入了一下门. 实现的功能,对于不 ...

  5. ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

  6. .net core 3.1 使用nlog记录日志 NLog.Web.AspNetCore

    背景 .net core 中已经集成了log的方法, 但是只能控制台输出不能写入文件等等. 常见第三方的的日志工具包括log4net, nlog等等, 本文介绍nlog 一. 引用程序集, nuget ...

  7. ASP.NET Core 2.0 使用NLog实现日志记录

    1.安装NuGet包 1.Install-Package NLog.Web.AspNetCore 2.Install-Package NLog 在csproj中编辑: <PackageRefer ...

  8. .net core 2.0 Unable to convert MySQL date/time to System.DateTime

    解决方案 在连接字符串加入convert zero datetime=True

  9. 基于.net core 2.0+mysql+AceAdmin搭建一套快速开发框架

    前言 .net core已经出来一段时间了,相信大家对.net core的概念已经很清楚了,这里就不再赘述.笔者目前也用.net core做过一些项目,并且将以前framework下的一些经验移植到了 ...

随机推荐

  1. [Windows Hyper-V-Server]Enable or disable firewall rules under powershell / powershell下启用禁用防火墙规则

    http://www.cryer.co.uk/brian/windows/hyper-v-server/help_computer_cannot_be_managed.htm Enable COM+ ...

  2. Vue(四)组件

    组件的复用 这里的工程和上一节的一样 先建立一个组件 MyButton.vue <template> <button @click="count++">Yo ...

  3. Spring data jpa 调用存储过程处理返回参数及结果集

    一.环境 1.此随笔内容基于spring boot整合的spring data jpa项目, 2.数据库为mysql 5.7.9版本 二.内容 1. 新建存储过程 pro_query_object B ...

  4. 【优秀的iPhone/iPad数据恢复工具】Omni Recover for Mac 2.5

    [简介] 今天和大家分享最新的 Omni Recover for Mac 2.5 版本,这是一款Mac上优秀的iPhone/iPad设备数据恢复工具,支持恢复误删除的短信.照片.视频.文档.通话记录等 ...

  5. 四、Tensorflow的分布式训练

    TensorFlow中的集群(cluster)指的是一系列能够针对图(Graph)进行分布式计算任务(task).每个任务是同服务(server)相关联的.TensorFlow中的服务会包含一个用于创 ...

  6. 关于word-break和word-wrap的使用和区别

    当一段文字有一个长长长的英文单词的情况下使用这两个属性的区别: word-wrap: 哈哈哈, aaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb word-break: ...

  7. Springboot集成Spring Batch

    Spring官网 (https://spring.io/projects/spring-batch#overview)对Spring  Batch的解释: 一个轻量级的.全面的批处理框架,用于开发对企 ...

  8. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  9. guns初级使用

    1.下载guns gitee地址:https://gitee.com/stylefeng/guns 这里使用的是Guns v5.1 2.配置环境 2.1 导入项目 解压从gitee上下载的guns源码 ...

  10. TCP/IP详解(包含ack,seq)

    前言 个人认为在web开发中,对于TCP/IP协议的理解是首当其冲的,在大多数框架的冲击下,使我们淡化了对于TCP/IP协议的理解. 理解好TCP/IP对于每个web开发者都是很有必要的. TCP/I ...