net core体系-web应用程序7asp.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时,会自动创建一个新的文件。如下图:

原文地址:https://www.cnblogs.com/hmit/p/10767402.html

时间: 2024-10-28 16:40:14

net core体系-web应用程序7asp.net core日志组件的相关文章

net core体系-web应用程序-4asp.net core2.0 项目实战(1)-2项目说明和源码下载

本文目录1. 摘要2. Window下运行 3.linux下运行4. 开发记录5. 总结 1.概要 写<Asp.Net Core 2.0 项目实战>系列断断续续已经很长时间了,期间很多朋友要求开放源码,但是项目代码一直有很多问题,就算勉强开源出来大家看起来也比较费劲,运行起来也看不到实际的效果.在公司平时真的是太忙了,很少有时间去系统的整理一个框架,只能以学习这种形式边学边做.承诺大家开源出来此项目我做到了,虽然项目依然有很多问题,我接下来会再完善.功能暂时不会再增加了,暂时先做到权限管理,以

net core体系-web应用程序-4asp.net core2.0 项目实战(1)-3项目架构说明

本文目录1. 摘要2. 框架介绍 3. 权限管理之多一点说明4. 总结 1.  摘要 NCMVC角色权限管理框架是由最近练习Net Core时抽时间整理的系统,后续能不能发展成一个cms还要看朋友们是否有需要或时间是否充实.这里NCMVC主要还是给想要学习接触Asp.Net Core2.0的朋友们提供一些借鉴以及坑点提醒等,项目现在还有很多不足,以后会尽量完善一些.写这个系列也没有完全按照原来列好的目录正序来写,倒叙/插叙都有也是项目练习到了顺便记录下来仅此而已.中间有朋友留言说没有源码理解起来

net core体系-web应用程序-4asp.net core2.0 项目实战(1)-5项目数据库操作封装操作

本文目录1. 摘要2. Ado.Net数据库操作封装类 3. EF Core数据库操作4. 总结 1.  摘要 Asp.Net Core2.0下操作MSSQL数据库,这里介绍两种操作方式,一种是.NET Framework的ADO.NET<Ado.Net百科>,另一种就是Net Core2.0下的一种orm操作EF Core,由于本人习惯Ado.Net编程模式,EF Core涉猎不是很深,推荐网友连接,本文有不写的不到之处欢迎大家批评指正. 2.  Ado.Net数据库操作封装类 2.1配置文

net core体系-web应用程序-4asp.net core2.0 项目实战(1)-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证,登录是权限的最基础的认证,没有登录就没有接下来的各种操作权限管理,以及数据权限管理(暂不探讨),这里我们把登录当作全局权限,进入系统后再根据不同的角色或者人员,固定基本功能的展示,当不同的角色要对功能操作时,就需要验证操作权限,如:查看/添加/修改/删除,也就是我们常说的控制到按钮级.下面让我们一步一步来操作

ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入

在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就是指使用者,下层就是指被使用者. 二.IoC控制反转 控制反转(IoC,全称Inversion of Control)是一种思想,所谓“控制反转”,就是反转获得依赖对象的过程. 三.依赖注入(DI) 依赖注入设计模式是一种在类及其依赖对象之间实现控制反转(IoC)思想的技术. 所谓依赖注入(DI,全

ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口都以“I”开头,以“Repository”结尾.仓储层实现都以“Repository”结尾. 2.服务层接口都以“I”开头,以“Service”结尾.服务层实现都以“Service”结尾. 接下来我们正式进入主题,在上一章的基础上我们再添加一个web项目TianYa.DotNetShare.Core

ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

原文:ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用) 在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. PS:本章将主要采用构造函数注入的方式,下一章将继续分享如何使之能够同时支持属性注入的方式. 约定: 1.仓储层接口都以“I”开头,以“Repos

ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射

原文:ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射 本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义,这个对象是用来将我们的数据持久化到数据库,一般来说,持久化对象中的字段会与数据库中对应的 table 保持一致. 2.视图对象VO(View Object):视图对象 V

使用VS Code开发.Net Core 2.0 MVC Web应用程序教程之一

好吧,现在我们假设你已经安装好了VS Code开发工具..Net Core 2.0预览版的SDK dotnet-sdk-2.0.0(注意自己的操作系统),并且已经为VS Code安装好了C#扩展(在VS Code的扩展菜单中输入OmniSharp,安装扩展即可) 一.我们先在我们的电脑硬盘的某个神奇的目录下新建一个文件夹.我把这个地方选在D:\WorkTest下,创建的文件夹名称为MyCMS.注意,这一步不是在VS Code中完成的,貌似VS Code中不能创建文件夹. 二.在VS Code开发