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

server/2025/2/23 0:28:12/

 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.ppmy.cn/server/169687.html

相关文章

PostgreSQL 与 MySQL 有哪些区别

PostgreSQL 和 MySQL 是两种流行的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它们在功能、性能、扩展性和适用场景等方面存在显著差异。 以下是 PostgreSQL 和 MySQL 的主要区别&#xff1a; 1. 架构与设计理念 PostgreSQL&#xff1a; 强调标准兼…

Python高级语法之jsonpathBeautifulSoup解析器

目录&#xff1a; 1、jsonPath的使用2、使用jsonpath解析淘票票网页3、BeautifulSoup解析器的使用4、BeautifulSoup层级选择器的使用 1、jsonPath的使用 2、使用jsonpath解析淘票票网页 3、BeautifulSoup解析器的使用 4、BeautifulSoup层级选择器的使用

使用EasyExcel和多线程实现高效数据导出

​ 使用EasyExcel和多线程实现高效数据导出 1. 概述 在企业级应用中&#xff0c;数据导出是一个常见的需求。为了提高导出效率&#xff0c;尤其是在处理大量数据时&#xff0c;我们可以结合使用EasyExcel库和多线程技术。本文将详细介绍如何通过EasyExcel和多线程技术实现高…

Ubuntu搭建RTSP服务器

下载 http://www.live555.com/liveMedia/public/ 安装ffmpeg sudo apt install -y ffmpeg 转换文件&#xff08;必须&#xff01;&#xff09; ffmpeg -i test.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 test.264编译 ./genMakefiles linux-64bit make 启动服务器…

DeepSeek R1 与 OpenAI O1:机器学习模型的巅峰对决

我的个人主页 我的专栏&#xff1a;人工智能领域、java-数据结构、Javase、C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞&#x1f44d;收藏❤ 一、引言 在机器学习的广袤天地中&#xff0c;大型语言模型&#xff08;LLM&#xff09;无疑是最…

uniapp 打包安卓 集成高德地图

接入高德地图 let vm this;uni.chooseLocation({success: function (res) {// console.log(位置名称&#xff1a; res.name);// console.log(详细地址&#xff1a; res.address);// console.log(纬度&#xff1a; res.latitude);// console.log(经度&#xff1a; res.long…

实验流量统计设计

当我们需要统计实验中每个分支的实际进入次数时&#xff0c;如何设计一个高效、可靠且对业务影响最小的方案&#xff0c;成为了关键。以下是几种常见的流量统计方案的分析与实现设计 目标 不影响实际业务使用&#xff0c;不应该因为汇报错误&#xff0c;导致灰度、甚至实际业…

【Java从入门到起飞】流程控制语句

文章目录 1. 顺序结构2. 分支语句2.1 if-else条件判断结构2.1.1 基本语法2.1.3 if...else嵌套2.1.4 其它说明 2.2 switch-case选择结构2.2.1 基本语法2.2.3 利用case的穿透性2.2.4 if-else语句与switch-case语句比较 3. 循环语句3.1 for循环3.1.1 基本语法 3.2 while循环3.2.1 …