什么是LOGGING
传统意义上的黑匣子,记录操作
什么是日志
基本概念
1、日志级别:Trace<Debug<Information<Warning < Error < Critical
2、日志提供者(LoggingProvider):把日志输出到哪里。控制台、文件、数据库等。3、.NET的日志非常灵活,对于业务代码只要注入日志对象记录日志即可,具体哪些日志输出到哪里、什么样的格式、是否输出等都有配置或者初始化代码决定。
输出到控制台
1、NuGet: Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Console.
2、DI注入:services.AddLogging(logBuilder=>{
logBuilder.AddConsole();//可多个Provider
});
3、需要记录日志的代码,注入Iogger< T> 即可,T一般就用当前类,这个类的名字会输出到日志,方便定位错误。然后调用LogInformation()、LogError等方法输出不同级别的日志,还支持输出异常对象。
示例:
导入日志框架基础包,无论忘哪里输出
控制台日志输出
DI 注入
代码测试
运行结果:
发现只有warn fail 级别日志
更改日志最低级别限制
运行结果:
发现所有的都成功输出
设置为Error 则只会输出Error级别日志
测试二:
运行结果:
其他日志提供者
1、Console只适合开发阶段,why?运行阶段需要输出到文件等。
2、采用和Configuration类似的扩展机制,不仅内置了Debug、事件查看器、文件、zure日志等提供者,还可以扩展。Provider可以共存
3、EventLog:WindowsOnly。在Windows下部署的程序、网站运行出错、不正常,先去EventLog看看。NuGet安装:
Microsoft,Extensions.Logging.EventLog。然后logBuilder.AddEventLog()
日志系统2 NLOG
文本日志
1、运维人员更喜欢文本日志,为啥?
控制台日志 很容易被刷掉,也不能被长久保存
1、为什么文本日志一般按照日期区分?
如果程序运行很久的话,产生得日志文件将会十分庞大,也方便更好的定位问题
2、如何避免文本日志把磁盘撑爆?限制日志总个数或者总大小。
记满了一定数量,删除之前的
3、如何避免一个日志文件太大的问题?ICBC故事。限制单个文件大小。
NLOG
1、.NET没有内置文本日志提供者。第三方有Log4Net、NLog、Serilog等。老牌的Log4Net另搞一套,不考虑。
2、NLog,NuGet安装:NLog.Extensions.Logging
(usingNLog.Extensions.Logging;)。项目根目录下建nlog.config,注意文件名的大小写(考虑linux)也可以是其他文件名,但是需要单独配置。约定大于配置。内容见备注。讲解一下配置文件。
3、增加logBuilder.AddNLog()
示例
创建nlog.config 文件,小写
将官网中的配置信息,拷如config 配置文件
自定义修改文件
去掉得话 默认保存在项目文件下
更改配置文件属性,为如果较新则复制
因为程序运行的时候,加载的是输出目录下的配置文件
DI 注入
运行结果
查看项目输出目录