asp.net core日志组件
日志介绍
Logging的使用
1. appsettings.json中Logging的介绍
Logging的配置信息是保存在appsettings.json配置文件中的。因为之前介绍配置文件的时候我们使用的是appsettings.Development.json这个文件,所以在介绍Logging的时候我们也用它吧。

通过上图可以看到Logging节点,下面有两个子节点IncludeScopes和LogLevel。
IncludeScopes表示是否要使用日志作用域。在同一个作用域下的日志都会打上相同的标记,告诉我们这些日志是一组的,属于同一个作用域。在using块中使用,就像我们使用数据库事物操作一样。
LogLevel表示日志的级别,默认Warning。如果我们在代码中输出Info级别的日志,是不会有任何输出的。因为设置的级别是Warning,只会输出高于和等于Warning级别的日志。
日志的级别:Trace ->Debug-> Information ->Warning-> Error-> Critical,从左往右由低到高。
另外我们还可以指定命名空间和命名空间的日志级别。如下图中的System和Microsoft。当遇到System.*或者Microsoft.*开头的命名空间,日志级别采用Error的级别。我在这里设为Error级别,因为如果级别设置太低的话,每次运行程序都会有一大堆的追踪日志。不便于我们查找想要的日志信息。

废话不多说了,接下来通过实例一一介绍。
2.注入Logger
因为Logger是.net core自带的日志输出组件,而且默认已经存在于DI容器中,所以我们仅需通过构造方法注入Logger即可。

3.演示普通日志

F5运行程序,通过多次刷新页面,控制台窗口输出结果:

4.演示日志级别

控制台输出结果:

可以看到trace级别的日志没有输出。因为appsettings.json中设置的Default级别为debug,高于trace级别。
5.演示日志作用域

首先创建一个使用控制台作为输出媒介的Logger工厂,同时第一个参数表示日志的默认级别为debug,第二个参数表示使用作用域记录日志。
然后就是创建一个指定全名(SongLou.Web.Controllers.HomeController)的Logger实例。
最后使用using括起来,指定作用域。
输出见下图:

Nlog的使用
1.简单介绍
NLog是一个基于.NET平台编写的类库,我们可以使用NLog在程序中添加完善的调试追踪代码。根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。配置简单灵活。
NLog遵从BSD license,即允许商业应用且完全开放源代码。任何人都可以免费使用并对其进行测试,然后通过邮件列表反馈问题以及建议。
NLog日志输出目标:控制台、文本文件、数据库、Email、消息队列等。虽然有这么多输出目标,但是我只会介绍控制台和文本文件,有精力的同学可以研究其它的输出目标。
2.targets和rules
NLog包含最基本的两大元素:targets和rules。target用来配置日志的输出类型(type)、输出目标(fileName)、输出格式(layout)等。rules用来配置日志的输出规则,比如:info级别的日志输出到哪个target、设置日志的最低级别。由writeTo来指定输出到哪个target,具体的值为target的name。下面会详细介绍。
3.安装Nlog包
通过NuGet安装下面两个包,同时注意版本。
NLog.Extensions.Logging版本是:1.0.0-rtm-rc7
NLog.Web.AspNetCore版本是:4.5.0-rc3

4.添加nlog.config
如果要使用NLog,仅仅安装它的包是不行的,还需要我们进行相关配置。
先在根目录下添加一个空的nlog.config配置文件,如下图:

5.修改Startup.cs
引入两个命名空间:
using NLog.Extensions.Logging;
using NLog.Web;
修改Configure方法。添加对IloggerFactory的引用,并加入代码:
loggerFactory.AddNLog();
env.ConfigureNLog("nlog.config");
具体看下图:

6.NLog输出到控制台
Nlog的配置非常灵活,功能也很强大,所以注定配置会有很多。但是我们目前只关注在控制台输出日志,其它的先不要考虑。下面给出最简单的配置,如下图:

配置文件完成之后,添加测试代码,如下图:

直接F5运行,结果如下:

日志按照我们配置的输出格式输出到控制台了。因为这个演示没有写文件,只是将日志输出到控制台,所以它的fileName我们没有配置,接下来的写入到文件的演示将会用到fileName。
7.NLog输出到文件
具体配置如下图:

对配置做下简单介绍。target节点中的name表示target的名字,rules节点里面的writeTo属性会用到。type为file,表示日志的输出类型是文件。fileName表示日志输出到哪个目录的哪个文件,没有会自动创建。layout表示日志内容的格式:“日期|大写的日志级别|具体日志信息|异常信息”。
再来看看rules。logger节点的name属性表示程序中的具体类型。打个比方,我只想在NLogController这个类里面做日志,我就可以设置name=”SongLou.Web.Controllers. NLogController”,我这里设置的是*号,表示在任何一个地方都可以将日志写入到文件。writeTo指定具体的target,我这里设置的是name为logfile的target。
可以添加多个target,也可以添加多个logger。多个logger可以指定同一个target。
修改代码,如下图:

配好之后,直接按F5运行,这个时候,我们在相应的目录就可以看到NLog成功写入文件:

8.NLog滚动日志介绍
什么是滚动日志?
在生产环境中,日志不可能保存在一个文件里面。随着文件内容越来越多,单个文件也会越来越大,不仅在打开时不方便,对我们查找具体的日志也不方便。如果保存在很多小的文件里面,随着程序运行的时间越来越久也会产生很多个文件,这样做也不好。特别是现在有很多日志搜集工具,只要能保证日志搜集工具能够搜集到所有的日志即可。然后再同步到我们的数据库(ElasticSearch),比如用logstash就可以做日志搜集。
为了更好的理解,我画了一张图。假如日志文件最多保存5个,每个大小1K。当5个文件都满的时候,NLog会把最后一个文件删除,前面4个文件往后移动并对文件名做+1操作重新命名。而新产生的日志就会放在file1文件里。

关于滚动日志有几个属性做下简单介绍。
archiveFileName:滚动文件名称,可以设置按规则命名
archiveAboveSize:滚动文件的大小,以字节为单位
archiveNumbering:Rolling,轮转;Sequence,升序
concurrentWrites:同一个主机是否允许多个线程并发写日志
maxArchiveFiles:保留文件个数
keepFileOpen:有一种特殊的方法保持文件打开状态,设为true有助于提高性能,因为设置为true之后concurrentWrites就不起作用了。
具体配置如下:

代码无需做任何改动,按F5运行。多刷新几次页面,当文件的大小达到1K时,会自动创建一个新的文件。如下图:

asp.net core日志组件的更多相关文章
- net core体系-web应用程序-4net core2.0大白话带你入门-7asp.net core日志组件(Logger和Nlog)
asp.net core日志组件 日志介绍 Logging的使用 1. appsettings.json中Logging的介绍 Logging的配置信息是保存在appsettings.json配置 ...
- .NET 黑魔法 - asp.net core 日志系统
asp.net core 里如何记录日志呢? 这要从asp.net core的依赖注入说起,在asp.net core里的依赖注入真是无所不在,各种面向切面的接口与事件. 好吧,来点干货. 首先,我们 ...
- asp.net core 日志
日志输出是应用程序必不可少的部分,log4net,nlog这些成熟的组件在之前的项目中被广泛使用,在asp.net core的项目中没有找到与之对应的log4net版本,nlog对core提供了很好的 ...
- ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门
一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...
- ABP .Net Core 日志组件集成使用NLog
一.说明 NLog介绍和使用说明官网:http://nlog-project.org/ NLog和Log4net对比:https://www.cnblogs.com/qinjin/p/5134982. ...
- 自定义ASP.NET Core日志中间件
这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息. 1.首先创建一个Web应用项目,我选择的是MVC模板: 2.使用NuGet添加Microsoft.Extens ...
- 笔记: ASP.NET Core视图组件
视图组件 asp.net core mvc 提供了部分视图的新替代品:视图组件. 视图组件与分布视图的主要区别在于视图组件与控制器不相关.可使用在独立于单个控制器的场景,如:菜单导航.侧边栏.分页栏等 ...
- 总结:利用asp.net core日志进行生产环境下的错误排查(asp.net core version 2.2,用IIS做服务器)
概述 调试asp.net core程序时,在输出窗口中,在输出来源选择“调试”或“xxx-ASP.NET Core Web服务器”时,可以看到类似“info:Microsoft.AspNetCore. ...
- Blazor入门:ASP.NET Core Razor 组件
目录 关于组件 组件类 静态资产 路由与路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留 ...
随机推荐
- FastReport动态绑定只显示一条数据。
产生这个问题的原因是因为需要把Band绑定DataSource.有两种方法 (1)DataBand data = report1.Report.FindObject("Data1" ...
- C# 对图片加水印
using System; using System.Collections; using System.Data; using System.Linq; using System.Web; usin ...
- java 多线程下载功能
import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; impo ...
- luogu P1053 篝火晚会
传送门 首先如果题目的目标状态不是一个环就不合法 然后先把这个环搞出来,然后每个位置上的数对这个数对应的位置连边,可以发现有若干个环,而只要对这些环执行操作就好了,答案上界显然是\(n\).然后,如果 ...
- luogu P3978 [TJOI2015]概率论
看着就是要打表找规律 使用以下代码 for(int i=3;i<=20;i++) { int a1=0,a2=0; for(int j=1;j<i;j++) { for(int k=0;k ...
- 【IT界的厨子】酱香鲈鱼
食材: 前世曾经回眸的鲈鱼一条(主要选刺少的鱼,适合孩子吃,大人吃随意,草鱼比较大) 五花肉少许(肥一些的) 豆腐 辅料: 葱姜 蒜(选) 大料 香菜 调味: 啤酒(两罐) 黄豆酱或豆瓣酱(选) 老抽 ...
- 微信小程序的页面渲染(if/for)
下面,粗略的介绍一下微信小程序的条件渲染.列表渲染.数据绑定等,详细的内容大家可以去看微信小程序的API,在此只做简单描述,希望能帮助到大家 条件渲染 <!--wxml--> <vi ...
- Toy Train(贪心)
题目链接:http://codeforces.com/contest/1130/problem/D1 题目大意:给你n个点,然后m条运输任务,然后问你从每个点作为起点是,完成这些运输任务的最小花费?每 ...
- android fragment解析
1.fragment加载到Activity (1).添加fragment到Activity的布局文件 (2).动态在activity中添加fragment 例子: // 步骤1:获取FragmentM ...
- 【CXF】com.sun.xml.internal.ws.fault.ServerSOAPFaultException: Client received SOAP Faul
在客户端生成代码之后测试出现错误: com.sun.xml.internal.ws.fault.ServerSOAPFaultException: Client received SOAP Faul ...