第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 支持以下几种日志等级(从最低到最高):
-
Trace:用于跟踪代码的执行流程和详细的调试信息。适合开发阶段使用,通常用于记录非常详细的消息。
-
Debug:用于调试目的的详细信息,通常用于开发和测试阶段。帮助开发者理解程序的内部运作。
-
Info:用于常规的信息性消息,表示程序的正常运行状态。例如,记录用户操作、系统事件等。
-
Warn:用于警告性消息,表示可能的潜在问题,但不会影响程序的正常运行。例如,某些依赖项不可用,但程序仍然可以继续运行。
-
Error:用于记录错误消息,表示程序运行中发生了异常。通常需要关注,以便后续进行错误处理。
-
Fatal:用于重大错误消息,表示系统无法继续运行。通常指的是严重的运行时错误,导致程序崩溃或无法恢复的状态。
日志等级排序
这几种日志等级的排序从低到高,如下:
- Trace
- Debug
- Info
- Warn
- Error
- Fatal
3.3.3 集中式日志
长话短说:在分布式环境中,为了方便管理日志,最好采用集中式的日志服务器,各个服务器都把产生的日志写入专用的日志服务器。
杨老师推荐了两个集中式日志的开源项目:Exceptionless和ELK。
ELK是目前非常流行的开源集中式日志分析系统之一,不过由于ELK是Java开发的,因此对于不熟悉Java的同志不太友好,所以推荐使用Exceptionless ,Exceptionless的开发人员主推他们的日志云服务,不用自己搭建服务器,而是直接购买他们的云服务,然后程序直接把日志发送给他们的服务器即可。
巴拉巴拉说了一堆,最后的建议是:他俩的服务器都在境外,访问比较缓慢,因此一般都是自己选择开源的集中式日志系统进行部署日志服务器。
3.4 第三章小结
本章介绍了依赖注入、配置系统和日志这3个模块。依赖注入可以让程序组件以低耦合的
形式组装在一起;配置系统允许我们通过命令行、环境变量、配置文件甚至自定义配置源来进
行系统的配置,多配置源的机制能让我们更灵活地对系统进行配置;使用日志功能,可以把日
志信息按照不同的级别输出,也可以在不改变业务代码的前提下,对于日志的输出进行灵活的
定制。
相关文章:
第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.…...
R语言NIMBLE、Stan和INLA贝叶斯平滑及条件空间模型死亡率数据分析:提升疾病风险估计准确性...
全文链接:https://tecdat.cn/?p40365 在环境流行病学研究中,理解空间数据的特性以及如何通过合适的模型分析疾病的空间分布是至关重要的。本文主要介绍了不同类型的空间数据、空间格点过程的理论,并引入了疾病映射以及对空间风险进行平滑处理…...
Java 反射 (Reflection) 详解
一、什么是 Java 反射? Java 反射 (Reflection) 是 Java 语言的一个强大特性,它允许 在运行时 检查和修改类、接口、字段和方法的信息,而不需要在编译时知道这些信息。 换句话说,反射可以让你在程序运行过程中“动态”地获取类的…...
在 C++ 中,`QMessageBox_s::question_s2` 和 `app.question_s2` 的区别(由DS-V3生成)
在 C 中,QMessageBox_s::question_s2 和 app.question_s2 的区别主要在于它们的调用方式和上下文范围。以下是对两者的详细解释: 1. QMessageBox_s::question_s2 解释: QMessageBox_s::question_s2 是一个静态成员函数的调用。它属于类 QMess…...
vxe-grid 通过配置式给单元格字段格式化树结构数据,转换树结构节点
vxe-grid 通过配置式给单元格字段格式化树结构数据,转换树结构节点 比如用户自定义配置好的数据源,通过在列中配置好数据,全 json 方式直接返回给前端渲染,不需要写任何格式化方法。 官网:https://vxetable.cn npm i…...
大厂算法面试常见问题总结:高频考点与备战指南
在大厂算法面试中,数据结构与算法是必考的核心内容。 无论是校招还是社招,算法题的表现往往决定了面试的成败。 为了帮助大家更好地备战,本文总结了大厂算法面试中的高频考点,并提供了详细的备战建议,助你轻松应对面…...
制造行业CRM选哪家?中大型企业CRM选型方案
在当今竞争激烈的制造行业中,企业对于客户关系管理(CRM)系统的需求日益增强,高效、智能的CRM系统已成为推动企业业务增长、优化客户体验的关键。在制造业 CRM 市场中,纷享销客和销售易都备受关注,且各自有着…...
PHP集成软件用哪个比较好?
在Windows环境下,使用PHP时,通常需要一个集成开发环境(IDE)或者集成软件来简化开发和调试过程。以下是几款常用且推荐的PHP集成软件,每款都有其特点,可以根据需求进行选择: 1. XAMPP 特点&…...
当pcie设备变化时centos是否会修改网络设备的名称(AI回答)
当pcie设备变化时centos是否会修改网络设备的名称 在CentOS(以及其他基于Linux的操作系统)中,网络接口的命名通常遵循特定的规则,尤其是在使用PCIe设备(如网络适配器)时。网络接口的命名通常基于设备的物理…...
Mac arm架构使用 Yarn 全局安装 Vue CLI
dgqdgqdeMacBook-Pro spid-admin % vue --version zsh: command not found: vue要使用 Yarn 安装 Vue CLI,你可以执行以下命令: yarn global add vue/cli这个命令会全局安装 Vue CLI,让你可以使用 vue 命令创建、管理 Vue.js 项目。以下是一…...
【Python游戏】双人简单对战游戏
以下是一个使用 Python 的 pygame 库实现的简单对战游戏示例,游戏中玩家可以控制两个角色进行对战,并且支持自定义图片(最好使用无底色的png图片)。完整源码以及实现思路: import pygame import os# 初始化 Pygame pygame.init()# 设置游戏窗…...
Windows11切换回Windows10风格右键菜单
参考文章:Win11新版右键菜单用不惯?一键切换回Win10经典版!-CSDN博客 以管理员权限运行命令行cmd 切换为经典旧版右键菜单,执行 reg.exe add “HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServe…...
怎么学习调试ISP的参数
摄像头的 **Sensor 获取的 RAW 数据** 是未经处理的原始图像数据,通常需要经过 **ISP(Image Signal Processor,图像信号处理器)** 的处理,才能生成可用的图像或视频。ISP 的作用是对 RAW 数据进行一系列图像处理操作&a…...
“三次握手”与“四次挥手”:TCP传输控制协议连接过程
目录 什么是TCP协议 “三次握手”建立连接 “四次挥手”断开连接 “三次握手”和“四次挥手”的反思 总结 什么是TCP协议 想象一下,你和远方的朋友要进行一场电话交流,但这通电话不仅仅是随便聊聊,而是要传递一封重要的信件。为了确保这…...
OpenCV形态学操作
1.1. 形态学操作介绍 初识: 形态学操作是一种基于图像形状的处理方法,主要用于分析和处理图像中的几何结构。其核心是通过结构元素(卷积核)对图像进行扫描和操作,从而改变图像的形状和特征。例如: 腐蚀&…...
深入理解WebSocket接口:如何使用C++实现行情接口
在现代网络应用中,实时数据传输变得越来越重要。通过WebSocket,我们可以建立一个持久连接,让服务器和客户端之间进行双向通信。这种技术不仅可以提供更快的响应速度,还可以减少不必要的网络流量。本文将详细介绍如何使用C来实现We…...
汇能感知的光谱相机/模块产品有哪些?
CM020A 分辨率:1600H1200V 光谱范围:350~950nm 光谱分辨率:1nm 接口:USB2.0 帧率:16001200 (6帧) 输出格式:Raw 8bit FOV:D73.5H58.8V44.1 相机尺寸:505055mm VM02S10 分辨率…...
抓包工具是什么?
抓包工具是一种用于捕获和分析网络数据包的软件或硬件设备。它可以帮助用户监控网络通信过程,查看网络中传输的数据内容、协议类型、源地址、目的地址等信息。以下是关于抓包工具的一些详细解释: 1. 主要功能 捕获数据包:抓包工具能够实时捕…...
Kubernetes的Ingress 资源是什么?
在Kubernetes中,Ingress资源是一种用于管理集群外部对内部服务访问的API对象,主要用于将不同的外部请求路由到集群内的不同服务,以下是关于它的详细介绍: 定义与作用 Ingress资源定义了从集群外部到内部服务的HTTP和HTTPS路由规…...
【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致
业务场景 发布信息,更新到数据库MySQLCOS操作,更新JSON文件 不过可能存在幂等性和数据一致性的问题。 // 批量存MySQL entityPublishService.saveOrUpdateBatch(entityPublishList); // 遍历批量存COS对象存储searchEntitys.forEach(req -> {//删除…...
从STL到JT:CAD Exchanger SDK如何帮你搞定工业软件里最棘手的格式兼容问题?
工业软件数据互通困境的破局之道:CAD Exchanger SDK深度解析 在工业软件领域,数据格式的碎片化一直是困扰产品经理和开发者的顽疾。想象这样一个场景:您的PLM系统需要处理来自20家不同供应商的CAD模型,这些文件横跨JT、STEP、Para…...
基于STM32G474的微型逆变器设计方案:源代码、原理图及PCB布局一体化展示
400w微型逆变器, 基于stm32g474实现 设计方案,不是成品 带有源代码、原理图(AD)、PCB(AD)系统概述 本系统基于STM32G474微控制器实现了一个400W微型逆变器的核心控制功能。系统采用先进的双ADC同步采样架构,结合多种保护机制,实现了高效、可靠…...
别再傻傻分不清:技术人必须懂的编解码版税(Royalty)与授权费(License Fee)区别
技术人必知的编解码器商业规则:版税与授权费深度解析 当你在会议室里与团队讨论下一个视频平台的技术选型时,是否曾被突如其来的法务问题打断节奏?"这个编解码器的授权费怎么算?""开源实现是否还需要支付版税&…...
3步轻松搞定Fedora启动盘:Media Writer全平台指南
3步轻松搞定Fedora启动盘:Media Writer全平台指南 【免费下载链接】MediaWriter Fedora Media Writer - Write Fedora Images to Portable Media 项目地址: https://gitcode.com/gh_mirrors/me/MediaWriter Fedora Media Writer是一款专为Fedora系统设计的启…...
别再乱写SDC了!手把手教你搞定时钟约束(从create_clock到set_clock_group)
数字设计时序约束实战:从基础时钟定义到复杂时钟域处理 在数字集成电路设计中,时钟约束的正确编写往往决定着整个项目的成败。许多初学者在掌握了基本SDC语法后,面对实际项目中的复杂时钟结构时仍然会犯各种典型错误。本文将从一个资深后端工…...
5个核心技巧:用sd-webui-animatediff打造专业级AI动画视频
5个核心技巧:用sd-webui-animatediff打造专业级AI动画视频 【免费下载链接】sd-webui-animatediff AnimateDiff for AUTOMATIC1111 Stable Diffusion WebUI 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-animatediff sd-webui-animatediff 是一款革…...
Excalidraw手绘白板:从零到一的完整协作绘图指南
Excalidraw手绘白板:从零到一的完整协作绘图指南 【免费下载链接】excalidraw Virtual whiteboard for sketching hand-drawn like diagrams 项目地址: https://gitcode.com/GitHub_Trending/ex/excalidraw 想要一款既专业又轻松的手绘风格白板工具吗&#x…...
如何免费解锁加密音乐:Unlock-Music 完整使用指南与解密方案
如何免费解锁加密音乐:Unlock-Music 完整使用指南与解密方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址:…...
Vector CANoe安装后必做的5件事:从软件配置到第一个Demo工程运行
Vector CANoe安装后必做的5件事:从软件配置到第一个Demo工程运行 当你第一次双击桌面上的CANoe图标时,可能会被复杂的界面和众多功能选项弄得不知所措。安装完成只是开始,真正的挑战在于如何让这个强大的工具为你所用。本文将带你完成五个关键…...
HEIF Utility:Windows用户处理iPhone照片的终极解决方案
HEIF Utility:Windows用户处理iPhone照片的终极解决方案 【免费下载链接】HEIF-Utility HEIF Utility - View/Convert Apple HEIF images on Windows. 项目地址: https://gitcode.com/gh_mirrors/he/HEIF-Utility 还在为Windows电脑无法查看iPhone拍摄的HEIF…...

