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时,会自动创建一个新的文件。如下图:

net core体系-web应用程序-4net core2.0大白话带你入门-7asp.net core日志组件(Logger和Nlog)的更多相关文章

  1. net core体系-web应用程序-4net core2.0大白话带你入门-2asp.net core新建项目

    新建asp.net core项目   开发环境:Windows Server R2 2008 开发工具:Microsoft Visual Studio 2017 新建asp.net core项目 创建 ...

  2. net core体系-web应用程序-4net core2.0大白话带你入门-6asp.net core配置文件

    asp.net core配置文件   读取配置文件 asp.net core使用appsettings.json代替传统.net framework的web.config中的<appSettin ...

  3. net core体系-web应用程序-4net core2.0大白话带你入门-5asp.net core环境变量详解

    asp.net core环境变量详解   环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...

  4. net core体系-web应用程序-4net core2.0大白话带你入门-4asp.net core配置项目访问地址

    asp.net core配置访问地址  .net core web程序,默认使用kestrel作为web服务器. 配置Kestrel Urls有四种方式,我这里只介绍一种.其它方式可自行百度. 在Pr ...

  5. net core体系-web应用程序-4net core2.0大白话带你入门-3asp.net core项目架构和配置文件解读

    asp.net core web项目目录解读   Connected Services 和传统.net web项目相比,它的功能类似于添加webservice或者wcf service的引用.暂时用不 ...

  6. net core体系-web应用程序-4net core2.0大白话带你入门-11asp.net core 2.0 cookie的使用

    asp.net core 2.0 cookie的使用   本文假设读者已经了解cookie的概念和作用,并且在传统的.net framework平台上使用过. cookie的使用方法和之前的相比也有所 ...

  7. net core体系-web应用程序-4net core2.0大白话带你入门-10asp.net core session的使用

    asp.net core session的使用   Session介绍 本文假设读者已经了解Session的概念和作用,并且在传统的.net framework平台上使用过. Asp.net core ...

  8. net core体系-web应用程序-4net core2.0大白话带你入门-9asp.net core服务的生命周期

    asp.net core服务的生命周期   Transient:每一次GetService都会创建一个新的实例 Scoped:在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request ...

  9. net core体系-web应用程序-4net core2.0大白话带你入门-8asp.net core 内置DI容器(DependencyInjection,控制翻转)的一点小理解

    asp.net core 内置DI容器的一点小理解   DI容器本质上是一个工厂,负责提供向它请求的类型的实例. .net core内置了一个轻量级的DI容器,方便开发人员面向接口编程和依赖倒置(IO ...

随机推荐

  1. CSS3 Hover 动画特效

    根据 奇舞团:http://www.75team.com/archives/807 做的demo 根据视频中跟着做的 demo1: <!DOCTYPE html> <html lan ...

  2. win10:在关闭防火墙下如何屏蔽特定端口

    如果win10没有组策略,请参考:https://www.cnblogs.com/huiy/p/9291392.html 在"开始"菜单选择"运行",输入&qu ...

  3. HBase基础架构及原理

    1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...

  4. 解决:Gitlab的developer角色的人没有push权限无法提交(转)

    问题 几位同事合作搞一些东西,打算在Gitlab上建一个仓库,然后协同开发.建好仓库后,将其他几位同事添加进来,角色分配为Developer. 之后提交初始代码到master分支后,他们用source ...

  5. 前端 ----jQuery操作表单

    05-使用jQuery操作input的value值   表单控件是我们的重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等 那么通过上节知识点我们了解到,我们在使用j ...

  6. Go语言环境安装&搭建(Linux)

    Linux的东西果然不记不行啊~ 下载&安装 下载 我们先找到linux版的下载链接 https://golang.org/dl/ 打开网址找到Linux对应的链接右键复制下载地址 然后连接服 ...

  7. iOS 高德地图轨迹回放的 思路, 及方法

    // 开始,公司要求制作一段跑步轨迹 在地图上的 动画回放, 传入一段经纬度, 开始一想,这不是很简单吗, 高德地图有可以把经纬度转换成坐标点的方法 /** * @brief 将经纬度转换为指定vie ...

  8. SpringCloud服务提供者

    服务提供者就是提供一个服务暴露出来给别人调用,在springcloud中需要注册服务到服务中心 搭建服务提供者项目(ProduceDemo) 1.创建pom.xml <project xmlns ...

  9. TabLayout和ViewPager

    这里就说下tablayout+viewpager的实现方式:tablayout是android5.0推出来的一个MaterialDesign风格的控件,是专门用来实现tab栏效果的:功能强大,使用方便 ...

  10. 《剑指offer》用两个栈实现队列

    本题来自<剑指offer> 用两个栈实现队列 题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 队列定义:先进先出 栈定义:先进后出 要 ...