一、
飞机黑匣子
什么是日志,日志的作用;
基本概念
1、日志级别:Trace < Debug < Information < Warning < Error < Critical
2、日志提供者(LoggingPrivider):把日志输出到哪里,控制台 文本文件 数据库等;
3、.NET的日志非常灵活
日志输出到控制台
1、NuGet安装 Microsoft.Extensions.Logging(基础包)
Microsoft.Extensions.Logging.Console
2、DI注入
Services.AddLogging(logBuilder =>{
logBuilder.AddConsole(); 可以添加多个Provider
})
3、需要记录日志的代码,注入ILoggre<T>即可,T一般就用当前类,这个类的名字会输出到日志,方便定位错误;然后调用LogInfomation(),LogError()等方法输出不同级别的日志,还支持输出异常现象;
代码演示
设置默认输出最低级别
输入异常信息
Windows系统自带事件日志查看器,EventLog,仅在Windows系统中使用
使用EventLog
NuGet安装 Microsoft.Extensions.Logging.EventLog
LogBuilder.AddEventLog()
二、文本日志
1、文本日志,一般按照日期区分
2、如何避免文本日志把磁盘撑爆?限制日志总个数和限制单个文件大小
NLog使用
1、.NET没有内置文本日志提供者,第三方有Log4net,NLog,Serilog等,老牌的log4net另搞一套,不考虑
2、NuGet安装 NLog.Extensions.Logging
约定大于配置原则
3、增加 LogBuilder.AddNLog();
nlog.config文件默认内容在nlog官网复制,文件设置为“如果较新则复制”,视频中都有讲解;
NLog 配置文件讲解
三、日志分类、过滤
功能演示NLog 分类、过滤
NLog配置文件
archiveAboveSize:单个日志文件超过多少字节就把日志存档,避免单个文件太大
maxArchiveFiles:指定最大数量的存档文件,旧的会被删掉
maxArchiveDays:设定保存若干天的日志存档
“滚动日志”策略
rules配置说明,比较重要,设置规则
NLog其他扩展功能,输出源很多,具体看官网
避免冲突,使用一种类型日志系统配置;
四、
结构化日志,相对于文本日志,便于查询,分析,统计
集中化日志,集群化部署环境,便于查询,分析
Serilog
log4net =》Nlog =》Serilog 拥抱新技术
1、NLog也可以配置结构化日志,不过配置麻烦,推荐用Serilog
2、NuGet 安装 Serilog.ASPNetCore
3、Log.Logger = new LoggerConfigurations()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.Console(new JsonFormatter())
.CreateLogger()
builder.AddSerilog();
4、要记录的结构化数据通过占位符来输出:
logger.LogWarning("新增用户{@person}",new { });
集中日志服务
第三方日志云服务,Exceptionless,ELK自部署
Exceptionless
演示功能
解决方案的能力
日志总结:
1、普通项目用Nlog输出文本文件即可
2、集群部署项目用Serilog+“集中日志服务”
3、云服务或者本地自部署Exceptionless或者ELK等