当前位置: 首页 > article >正文

第3章 3.3日志 .NET Core日志 NLog使用教程

 3.3.1 .NET Core日志基本使用

书中介绍了把日志输出到控制台的使用方式:

安装 Microsoft.Extensions.Logging 和 Microsoft.Extensions.Logging.Console

日志记录代码:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;


ServiceCollection services = new ServiceCollection();
//将与日志相关的服务注册到容器中 ,AddConsole将日志输出到控制台
services.AddLogging(logBuilder => { logBuilder.AddConsole(); });
using (var sp=services .BuildServiceProvider())
{

    var logger = sp.GetRequiredService<ILogger<Program>>();

    logger.LogWarning("警告信息:八嘎呀路!");

    logger.LogError("错误信息:内蒙古海军上校詹姆斯下士于玉菊!");

    logger.LogInformation("正常日志信息:Chinese东北东四省:黑龙江、吉林、辽宁、日本");

    Console.ReadKey();
}

调试运行结果:

3.3.2 文件日志提供程序 NLog

杨老师在随书视频教程中讲了NLog的应用,我之前也自己用过NLog并有相关的应用教程:

.NET 日志记录 NLog包的使用_net nlog-CSDN博客

.Net记录日志的方式有多种,比如

System.Diagnostics.Trace 可以通过 System.Diagnostics.Trace 类记录调试和错误信息。它支持不同的监听器(例如:控制台、文件、事件日志等)来接收日志输出。

NLog NLog 是一个灵活且功能强大的开源日志库,支持多种日志级别和多种目标(如文件、数据库、邮件等)。

Serilog Serilog 是另一个强大的日志库,支持结构化日志,可以方便地记录复杂数据结构。

Log4Net Log4Net 是 Apache 提供的日志库,功能全面且使用广泛,适用于各种应用程序。

本文主要介绍NLog的使用

1. 安装NLog

在NuGet程序管理中搜索NLog,点击安装

或者使用 NuGet 包管理器控制台命令:

Install-Package NLog

在 【视图】-【其他窗口】-【程序包管理器控制台】,在控制台中输入Install-Package NLog进行安装。

2. 配置

在项目中添加config文件

编辑配置文件

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets>
    <!-- 将日志写入 date-based 文件 -->
    <target xsi:type="File" name="fileTarget" 
            fileName="logs/log_${shortdate}.txt" 
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}" 
            archiveEvery="Day"                 <!-- 每天生成新的日志文件 -->
            archiveNumbering="Date"            <!-- 归档文件根据日期命名 -->
            maxArchiveFiles="7"                <!-- 最多保留 7 个归档文件 -->
            />
            
    <!-- 将日志输出到控制台 -->
    <target xsi:type="Console" name="consoleTarget" 
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
  </targets>

  <rules>
    <!-- 记录所有等级的日志到文件 -->
    <logger name="*" minlevel="Debug" writeTo="fileTarget" />
    <!-- 记录错误及以上级别的日志到控制台 -->
    <logger name="*" minlevel="Error" writeTo="consoleTarget" />
  </rules>
</nlog>

配置说明:

  • fileName="logs/log_${shortdate}.txt":使用 ${shortdate} 占位符,NLog 会自动将其替换为当前日期(格式为 yyyy-MM-dd),从而生成每天新的日志文件,如 logs/log_2023-10-09.txt
  • archiveEvery="Day":这个设置会让 NLog 每天在日志轮转时创建一个新的日志文件。
  • archiveNumbering="Date":归档文件将以日期编号,这样每个归档文件都将带有相应的日期。
  • maxArchiveFiles="7":最多保留 7 个归档文件,超过这个数量的文件将被删除。

3.应用

  class Program
  {
      // 创建一个 logger 实例
      private static readonly Logger logger = LogManager.GetCurrentClassLogger();
      static async Task Main(string[] args)
      {

          try
          {
              logger.Debug("调试日志");
              logger.Info("程序开始运行");


              Class1 class1 = new Class1();

              // 可能会发生异常的代码
              throw new Exception("一个示例异常65265");
          }
          catch (Exception ex)
          {
              // 记录异常信息
              logger.Error( ex.Message);
          }
          finally
          {
              // 确保最后记录一些结束信息
              logger.Info("程序结束");
          }
      }


  }

4. 其他详情

4.1 关于rules

在 NLog 配置文件中的 <rules> 部分,name="*" 表示日志记录器的名称匹配所有的日志记录器。具体来说:

  • * 是一个通配符,表示匹配任何名称的日志记录器。这意味着这一规则适用于所有类别的日志(无论是哪个类、命名空间或组件所记录的日志)。
<logger name="*" minlevel="Debug" writeTo="fileTarget" />

这条规则的意思是:所有名称的日志记录器(即所有的日志消息)都会被记录到指定的 fileTarget 目标中,条件是日志级别大于或等于 Debug。换句话说,Debug、Info、Warn、Error 和 Fatal 等级的日志都会被写入到文件中。

<logger name="*" minlevel="Error" writeTo="consoleTarget" />

这条规则的意思是:所有名称的日志记录器都会将日志级别大于或等于 Error 的消息输出到控制台。这意味着只有 Error 和 Fatal 等级的日志才会在控制台上显示。

4.2 关于日志的等级

NLog 日志等级用于指示日志消息的严重性,并帮助开发者过滤和查找日志信息。NLog 支持以下几种日志等级(从最低到最高):

  1. Trace:用于跟踪代码的执行流程和详细的调试信息。适合开发阶段使用,通常用于记录非常详细的消息。

  2. Debug:用于调试目的的详细信息,通常用于开发和测试阶段。帮助开发者理解程序的内部运作。

  3. Info:用于常规的信息性消息,表示程序的正常运行状态。例如,记录用户操作、系统事件等。

  4. Warn:用于警告性消息,表示可能的潜在问题,但不会影响程序的正常运行。例如,某些依赖项不可用,但程序仍然可以继续运行。

  5. Error:用于记录错误消息,表示程序运行中发生了异常。通常需要关注,以便后续进行错误处理。

  6. Fatal:用于重大错误消息,表示系统无法继续运行。通常指的是严重的运行时错误,导致程序崩溃或无法恢复的状态。

日志等级排序

这几种日志等级的排序从低到高,如下:

  1. Trace
  2. Debug
  3. Info
  4. Warn
  5. Error
  6. Fatal

3.3.3 集中式日志

长话短说:在分布式环境中,为了方便管理日志,最好采用集中式的日志服务器,各个服务器都把产生的日志写入专用的日志服务器。

杨老师推荐了两个集中式日志的开源项目:ExceptionlessELK

ELK是目前非常流行的开源集中式日志分析系统之一,不过由于ELK是Java开发的,因此对于不熟悉Java的同志不太友好,所以推荐使用Exceptionless ,Exceptionless的开发人员主推他们的日志云服务,不用自己搭建服务器,而是直接购买他们的云服务,然后程序直接把日志发送给他们的服务器即可。

巴拉巴拉说了一堆,最后的建议是:他俩的服务器都在境外,访问比较缓慢,因此一般都是自己选择开源的集中式日志系统进行部署日志服务器。

3.4 第三章小结

本章介绍了依赖注入、配置系统和日志这3个模块。依赖注入可以让程序组件以低耦合的
形式组装在一起;配置系统允许我们通过命令行、环境变量、配置文件甚至自定义配置源来进
行系统的配置,多配置源的机制能让我们更灵活地对系统进行配置;使用日志功能,可以把日
志信息按照不同的级别输出,也可以在不改变业务代码的前提下,对于日志的输出进行灵活的
定制。


http://www.kler.cn/a/554688.html

相关文章:

  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_process_options
  • 云原生Ingress网关高并发高可用解决思路
  • 《被讨厌的勇气》(七)
  • 与本地电脑PDF文档对话的PDF问答程序
  • Python网络爬虫技术详解文档
  • 基于javaweb的SpringBoot商品进销存系统设计和实现(源码+文档+部署讲解)
  • SQL FIRST() 函数详解
  • 强化学习入门
  • MySQL 三层 B+ 树能存多少数据?
  • Maven 与 Kubernetes 部署:构建和部署到 Kubernetes 环境中
  • Windows环境打印文档的同时自动生成PDF副本的方法
  • ffmpeg 多路流处理在iOS的具体使用
  • 2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序
  • 悬挂引用,智能指针 裸指针 悬挂指针
  • 基础前端面试题:HTML网站开发中,如何实现图片的懒加载
  • rust笔记7-生命周期显式标注
  • 3分钟了解内外网文件传输:常见方法、注意事项有哪些?
  • 13-R数据重塑
  • 后端Java Stream数据流的使用=>代替for循环
  • Compose 组件渲染流程