日志服务可以分为2种,一种是NetCore内置的日志,一种是第三方日志服务组件,如Log4Net
需要掌握:
- NetCore不提供将日志写入文件的程序,如果要记录日志文件,请用第三方
- 日志记录应该会很快,不值得牺牲性能来使用异步代码。 如果日志记录数据存储很慢,请不要直接写入它。 考虑先将日志消息写入快速存储,然后再将其移至慢速存储。
使用最小托管模型创建应用,在中方法会添加以下日志服务。
即WebApplication对象中的Logging属性
添加的一组默认的日志记录提供程序
同样会在 文件的 部分提供文件生成一个日志相关的配置节点(不是6.0也会创建的)
- 默认等级:如果需要更改输出的级别日志下限等级,可以修改配置文件的 "Default"节点,比如修改为"Default"节点的内容为“Debug”,这意味着低于Debug等级的日志不会被记录
- 单个类设置等级:如果需要指定具体的类输出默认输出的下限的等级,可以增加以下节点
net内部组件日志一共分为7个等级,从低到高,可以从枚举LogLevel中看出来:
微软:在6.0开始,日志服务不再使用ILogger类型。而是使用ILogger
或将 ILogger 注册为依赖注入
首先,我们来了解一下这个东西,微软官方说是用于配置日志记录提供程序的接口,但是实际上,这个接口只提供了一个获取从DI容器中配置的日志服务的方法,我们更多的是使用他的拓展方法来配置我们自己的日志服务。
demo
一般在应用程序中,我们创建日志需要一个ILogger对象,而ILogger对象是由LoggerFactory工厂提供的,所以我们首先得需要一个ILoggerFactory工厂
由于netcore的日志组件,不能提供写入文件的服务,所以我们集成Log4net组件来为我们提供服务
- 安装Nuget包:log4net和对应的apsnet.core包
- 在中,注入服务,启用自定义配置文件
- 编写配置文件,如果不使用自定义配置文件,则可以写在中
7个等级由低到高:
- ALL:所有
- DEBUG:调试
- INFO:信息
- WARN:警告
- ERROR:报错
- FATAL:重大事故
- OFF :不输出
编写配置文件的原因是需要设置日志的一些基本参数,文件格式为xml。
注意:
- appenders、logger、root这几个节点需要小写!!!否则读取不到
以下有些配置信息不太全面,具体百度官网查看,我这里只写了我们比较常用的几个
log4net有3个节点
Appenders节点:
作用:
定义日志的输出方式,可以存在多个,可以理解为日志的输出模板。
必须属性:
type:Appender对象的输出类型,设置为log4net.Appender.RollingFileAppender则是 日志以回滚文件的形式写到文件中,AdoNetAppender则是写入数据库,有许多种选择,请自行百度。
name:Appender对象的名称,这个地方设置的值会在root标签用到
子节点:必须属性value,如果还有子节点param或者其他的时候则为type
这里的%class的数据来源是,当我们调用LogManager.GetLogger(typeof(类型)),会传入一个类的type,这就是他的数据来源,当前日志对象的名称。
格式参数,可以简写可以完整写:
%m(message):数据来源是,当我们得到的ILog对象,调用如Error或者Debug之类的方法,传入的message就是这个数据来源。
%d(datetime){yyy-MM-dd HH:mm:ss }:当前时间,{}里面是格式化内容
%r(runtime):运行时间
%p(priority):日志的等级
%c(class):类名
%t(thread):线程id
%l(line):行号
%f(file):文件名称
有一些会自动填充,有一些则来自于我们调用的方法的参数。
logger节点:
作用:
默认继承root节点,设置的目的是来单独处理一种日志,可以多个,比如定义一个错误日志的appender和一个错误日志的logger,然后请求日志一样配套appender和logger,这样做可以方便我们定义输出不同的日志类型,如果不定义,默认采用root节点。
怎么使用?:
在使用,可以获取logger对象
必须属性:
name:用于设置logger的名称,这个名称在使用,可以获取logger对象。
additivity:用于设置是否继承root节点。如果同时设置了root和logger,则logger里面的appender会写一份,root里面的appender也会写一份,设置为false可以避免出现这种情况
root节点:
作用:
只能有一个,是所有logger对象的父节点,必须设置,当我们在方法中,调用不使用logger节点的name属性获取logger的时候,默认就是拿的这个里面的输出配置。
在我们在注入服务后,编写完配置文件就可以开始使用了,
所有的日志对象都是由 来获取管理的,该类有一个静态的方法,通过这个方法来获取logger对象,这个方法有好几个重载
如果框架里不存在该Logger对象,它也会为我们创建一个Logger对象,默认的输出方式采用root节点里面的appender。
使用方法
得到logger对象后我们就可以用来输出了,比如debug、Info、Warn、Error、FatalFormat在不同的情况下使用不同的方法
完整demo
注意:我这里的ErrorLog的logger对象属性additivity没有设置为false,所以会写2次日志记录,一份到报错日志,一份默认请求日志。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/15205.html