您的当前位置:首页正文

.NET Core 之 六 日志系统

2024-11-20 来源:个人技术集锦

一、

        飞机黑匣子

        什么是日志,日志的作用;

        基本概念

                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等

显示全文