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

第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.lryc.cn/news/540285.html

相关文章:

  • R语言NIMBLE、Stan和INLA贝叶斯平滑及条件空间模型死亡率数据分析:提升疾病风险估计准确性...
  • Java 反射 (Reflection) 详解
  • 在 C++ 中,`QMessageBox_s::question_s2` 和 `app.question_s2` 的区别(由DS-V3生成)
  • vxe-grid 通过配置式给单元格字段格式化树结构数据,转换树结构节点
  • 大厂算法面试常见问题总结:高频考点与备战指南
  • 制造行业CRM选哪家?中大型企业CRM选型方案
  • PHP集成软件用哪个比较好?
  • 当pcie设备变化时centos是否会修改网络设备的名称(AI回答)
  • Mac arm架构使用 Yarn 全局安装 Vue CLI
  • 【Python游戏】双人简单对战游戏
  • Windows11切换回Windows10风格右键菜单
  • 怎么学习调试ISP的参数
  • “三次握手”与“四次挥手”:TCP传输控制协议连接过程
  • OpenCV形态学操作
  • 深入理解WebSocket接口:如何使用C++实现行情接口
  • 汇能感知的光谱相机/模块产品有哪些?
  • 抓包工具是什么?
  • Kubernetes的Ingress 资源是什么?
  • 【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致
  • DevOps自动化部署详解:从理念到实践
  • LeetCodehot 力扣热题100
  • 解锁 AIoT 无限可能,乐鑫邀您共赴 Embedded World 2025
  • C# 背景 透明 抗锯齿 (效果完美)
  • Debezium:实时数据捕获与同步的利器
  • Word中接入大模型教程
  • Centos修改ip
  • uni-app小程序开发 基础知识2
  • 第4章 4.1 Entity Framework Core概述
  • 在 Spring Boot 中使用 `@Autowired` 和 `@Bean` 注解
  • Langchain vs. LlamaIndex:哪个在集成MongoDB并分析资产负债表时效果更好?