.Net日志组件之NLog的使用和配置

server/2024/9/20 11:24:15/ 标签: .net, c#, .netcore, 后端

文章目录

  • .Net日志组件之NLog的使用和配置
    • 1、新建.Net8控制台项目
    • 2、Nuget安装NLog组件
    • 3、添加配置文件nlog.config
    • 4、右键文件nlog.config,修改属性为“始终复制 or 较新则复制”
    • 5、编写nlog.config配置文件内容
    • 6、编写c#代码测试记录简单日志
    • 7、编写c#代码测试记录实体日志
    • 8、配置文件参考链接

.Net日志组件之NLog的使用和配置

1、新建.Net8控制台项目

2、Nuget安装NLog组件

install-package NLog.Extensions.Logging

3、添加配置文件nlog.config

4、右键文件nlog.config,修改属性为“始终复制 or 较新则复制”

5、编写nlog.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><!--此部分中的所有目标将自动异步--><default-wrapper xsi:type="AsyncWrapper"></default-wrapper><!--type:日志输出类型 File:文件 ColoredConsole:控制台--><!--fileName:日志存储的路径及名称--><!--layout:日志输出格式--><!-- archiveFileName:要用于存档的文件的名称 可以指定日志 --><!-- archiveAboveSize:以字节为单位的大小,超过该大小的日志文件将被自动存档 --><!-- archiveNumbering:对文件档案进行编号的方式 --><!-- concurrentWrites:当使用keepFileOpen = true时,支持从同一机器主机上的多个进程优化并发写入同一日志文件。通过使用一种特殊的技术,它可以让文件从多个进程中打开。如果只有单个进程(和单个 AppDomain)应用程序正在记录日志,那么设置为concurrentWrites = False会更快。 --><!-- keepFileOpen:指示是否在每次记录事件时保持日志文件打开,将此属性更改为 true 将大大提高性能,但也会保持文件句柄锁定。启用此选项时,请考虑设置openFileCacheTimeout = 30,因为它将允许存档操作并对被删除的日志文件做出反应。 --><!--项目日志保存文件路径说明fileName="${basedir}/保存目录,以年月日的格式创建/${shortdate}/${记录器名称}-${单级记录}-${shortdate}.txt"--><target name="info_file" xsi:type="File"fileName="${basedir}/Logs/${shortdate}/info_${shortdate}.txt"layout="${longdate} | ${event-properties:item=EventId_Id:whenEmpty=0} | ${uppercase:${level}} | ${logger} | ${message} ${exception:format=tostring}"archiveFileName="${basedir}/archives/info_${shortdate}-{#####}.txt"archiveAboveSize="102400"archiveNumbering="Sequence"concurrentWrites="true"keepFileOpen="false" /><target name="error_file" xsi:type="File"fileName="${basedir}/Logs/${shortdate}/error_${shortdate}.txt"layout="${longdate} | ${event-properties:item=EventId_Id:whenEmpty=0} | ${uppercase:${level}} | ${logger} | ${message} ${exception:format=tostring}"archiveFileName="${basedir}/archives/error_${shortdate}-{#####}.txt"archiveAboveSize="102400"archiveNumbering="Sequence"concurrentWrites="true"keepFileOpen="false" /><targetxsi:type="ColoredConsole"name="colorConsole"encoding="Encoding"detectConsoleAvailable="true"detectOutputRedirected="false"useDefaultRowHighlightingRules="false"header="--------------------"layout="${longdate}|${level:uppercase=true}|${logger}|${message}|${exception} ${newline} ${stacktrace} ${newline}"footer="---------------------"><highlight-row condition="level == LogLevel.Trace" foregroundColor="DarkGray"/><highlight-row condition="level == LogLevel.Debug" foregroundColor="DarkBlue"/><highlight-row condition="level == LogLevel.Info" foregroundColor="White"/><highlight-row condition="level == LogLevel.Warn" foregroundColor="DarkYellow"/><highlight-row condition="level == LogLevel.Error" foregroundColor="Red"/><highlight-row condition="level == LogLevel.Fatal" foregroundColor="DarkRed"/></target><!--使用可自定义的着色将日志消息写入控制台--><!-- <target name="console" xsi:type="ColoredConsole" layout="[${date:format=HH\:mm\:ss}]:${message} ${exception:format=message}" /> --></targets><!--规则配置,final - 最终规则匹配后不处理任何规则--><!--定义使用哪个target输出--><rules><!-- 优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL --><!-- 将所有日志输出到文件 --><logger name="*" minlevel="Trace" maxlevel="Warn" writeTo="info_file" /><logger name="*" minlevel="Error" writeTo="error_file" /><!-- 将所有日志输出到控制台  --><logger name="*" minlevel="Debug" writeTo="colorConsole" /></rules>
</nlog>

6、编写c#代码测试记录简单日志

private static Logger _logger = LogManager.GetCurrentClassLogger();/// <summary>/// 测试记录日志/// </summary>public static void TestWriteLog(){//记录日志_logger.Info("测试NLog写日志 - Info");try{//转换var a = Convert.ToInt32("测试NLog写日志 - Error");}catch (Exception e){//记录日志_logger.Error(e, "测试NLog写日志 - Error");}}

在这里插入图片描述


2024-09-19 14:25:52.0496 | 0 | INFO | TestNLogApp.TestNLogService | 测试NLog写日志 - Info 
2024-09-19 14:35:45.2005 | 0 | INFO | TestNLogApp.TestNLogService | New SystemUser at 2024-09-19 14:35:45,Detail is {"Id":"f387511d-5f9d-4173-be77-4e3d0d535002", "Name":"姓名 - 0", "Age":23, "Birthday":"12/20/2024", "Hobbys":[]} 
2024-09-19 14:35:45.2311 | 0 | INFO | TestNLogApp.TestNLogService | New SystemUser at 2024-09-19 14:35:45,Detail is {"Id":"1ae83538-3e8d-4113-8417-5d6715e2cfaf", "Name":"姓名 - 1", "Age":25, "Birthday":"12/17/2026", "Hobbys":[]} 
2024-09-19 14:35:45.2501 | 0 | INFO | TestNLogApp.TestNLogService | New SystemUser at 2024-09-19 14:35:45,Detail is {"Id":"55d545af-f9fc-4a3c-817e-6713f697e0f3", "Name":"姓名 - 2", "Age":22, "Birthday":"10/26/2028", "Hobbys":[]} 
2024-09-19 14:35:45.2501 | 0 | INFO | TestNLogApp.TestNLogService | New SystemUser at 2024-09-19 14:35:45,Detail is {"Id":"ea8d300d-caf9-4afb-a02f-a88f5a2ef946", "Name":"姓名 - 3", "Age":18, "Birthday":"03/12/2015", "Hobbys":["篮球,足球,羽毛球,麻将"]} 
2024-09-19 14:35:45.2501 | 0 | INFO | TestNLogApp.TestNLogService | New SystemUser at 2024-09-19 14:35:45,Detail is {"Id":"57b1bbf7-87b2-4847-b404-dac0b8ff66e9", "Name":"姓名 - 4", "Age":26, "Birthday":"04/01/2031", "Hobbys":[]} 
2024-09-19 14:35:45.2501 | 0 | INFO | TestNLogApp.TestNLogService | New SystemUser at 2024-09-19 14:35:45,Detail is {"Id":"e4fc8688-a6fd-48c4-be56-def34edfce9b", "Name":"姓名 - 5", "Age":33, "Birthday":"11/05/2019", "Hobbys":["篮球,足球,羽毛球,麻将"]} 
2024-09-19 14:35:45.2501 | 0 | INFO | TestNLogApp.TestNLogService | New SystemUser at 2024-09-19 14:35:45,Detail is {"Id":"4db7bd7f-aef8-42df-a10d-a5bf822cbff2", "Name":"姓名 - 6", "Age":26, "Birthday":"05/02/2017", "Hobbys":[]} 

2024-09-19 14:25:52.0526 | 0 | ERROR | TestNLogApp.TestNLogService | 测试NLog写日志 - Error System.FormatException: The input string '测试NLog写日志 - Error' was not in a correct format.at System.Number.ThrowFormatException[TChar](ReadOnlySpan`1 value)at System.Convert.ToInt32(String value)at TestNLogApp.TestNLogService.TestWriteLog() in D:\01.lingbug\04.code\15.testMiniAuth20240918\TestNLogApp\TestNLogService.cs:line 24
2024-09-19 14:56:30.6702 | 0 | ERROR | TestNLogApp.TestNLogService | 测试NLog写日志 - Error System.FormatException: The input string '测试NLog写日志 - Error' was not in a correct format.at System.Number.ThrowFormatException[TChar](ReadOnlySpan`1 value)at System.Convert.ToInt32(String value)at TestNLogApp.TestNLogService.TestWriteLog() in D:\01.lingbug\04.code\15.testMiniAuth20240918\TestNLogApp\TestNLogService.cs:line 25

7、编写c#代码测试记录实体日志

public class SystemUser{public Guid Id { get; set; }public string Name { get; set; }public int Age { get; set; }public DateOnly Birthday { get; set; }public List<string> Hobbys { get; set; }}private static Logger _logger = LogManager.GetCurrentClassLogger();/// <summary>/// 测试记录日志 - 实体/// </summary>public static void TestWriteEntityLog(){for (int i = 0; i < 10; i++){//初始化var systemUser = new SystemUser();//赋值systemUser.Id = Guid.NewGuid();systemUser.Name = $"姓名 - {i}";systemUser.Age = Random.Shared.Next(18, 35);systemUser.Birthday = DateOnly.FromDateTime(DateTime.Now.AddYears(Random.Shared.Next(-10, 10)).AddMonths(Random.Shared.Next(-10, 10)).AddDays(Random.Shared.Next(-30, 30)));systemUser.Hobbys = new List<string>() { "篮球,足球,羽毛球,麻将" }.Skip(Random.Shared.Next(0, 2)).ToList();//记录日志_logger.Info("New SystemUser at {now},Detail is {@systemUser}", DateTime.Now, systemUser);}}

8、配置文件参考链接

  • NLog配置文件详解

http://www.ppmy.cn/server/119381.html

相关文章

【VUE3.0】动手做一套像素风的前端UI组件库---先导篇

目录 引言准备素材字体鼠标手势图 创建vue3项目构建项目1. 根据命令行提示选择如下&#xff1a;2. 进入项目根目录下载依赖并启动。3. 设置项目src路径别名&#xff0c;方便后期应用路径。4. 将素材按照自己的规则放置在assets文件夹下&#xff1a;5. 初始化全局css样式&#x…

python AutoGen接入开源模型xLAM-7b-fc-r,测试function calling的功能

AutoGen主打的是多智能体&#xff0c;对话和写代码&#xff0c;但是教程方面没有langchain丰富&#xff0c;我这里抛砖引玉提供一个autogen接入开源function calling模型的教程&#xff0c;我这里使用的开源repo是&#xff1a;https://github.com/SalesforceAIResearch/xLAM 开…

如何在 Qt 的 QListWidget 中逐行添加和显示数据

文章目录 如何在 Qt 的 QListWidget 中逐行添加和显示数据目标实现步骤1. 在 Qt Designer 中添加 QListWidget2. 在代码中逐行添加数据示例代码 代码解析3. 使用自定义项 运行效果总结 如何在 Qt 的 QListWidget 中逐行添加和显示数据 QListWidget 是 Qt 提供的一个非常方便的…

mysql DBA常用的sql

是否一般查询日志&#xff0c;默认关闭 show variables like ‘general_log’; 是否开启慢日志查询 默认关闭 show global variables like ‘slow_query_log’; 开启慢日志查询 SET GLOBAL slow_query_log ‘ON’; 默认是10 单位s SELECT long_query_time; 设置超过1s就算…

软考高级:数据库规范化: 1NF、2NF、3NF和 BCNF AI 解读

数据库的规范化是数据库设计中的一个重要过程&#xff0c;旨在减少数据冗余和提高数据一致性。它通过一系列规则&#xff08;称为范式&#xff09;来优化数据库表的结构。 常见的范式有1NF、2NF、3NF和BCNF。让我们分别来解释这些范式。 生活化例子 想象你在整理一个家庭成…

一、编译原理(引论)

目录 【一】、引论 一、编译器 1、编译器 2、编译器与解释器 3、编译器结构 【一】、引论 一、编译器 1、编译器 &#xff08;1&#xff09;编译器&#xff1a;将人类易懂的 高级语言 翻译成 硬件可执行的目标机器语言 &#xff08;2&#xff09; 高级语言 ⚫ 直接面…

回归预测|基于饥饿游戏搜索优化随机森林的数据回归预测Matlab程序HGS-RF 多特征输入单输出 高引用先用先创新

回归预测|基于饥饿游戏搜索优化随机森林的数据回归预测Matlab程序HGS-RF 多特征输入单输出 高引用先用先创新 文章目录 一、基本原理1. 饥饿游戏搜索优化算法&#xff08;HGS&#xff09;简介2. 随机森林&#xff08;RF&#xff09;简介3. HGS-RF回归预测流程1. 初始化2. 随机森…

linux第三课(linux中安装nginx与redis及SpringBoot集成redis)

目录 一.nginx引入 二.关于nginx 1.什么是nginx 2.nginx的特点 3.在nginx中安装nginx 三.关于redis 1.背景引入 2.什么是redis 3.redis的特点 4.在linux下的docker中安装redis 四.redis中的数据结构 (1)String(字符串) (2)Hash (3)list(列表) (5)zset(sorted se…

Qt_布局管理器

目录 1、QVBoxLayout垂直布局 1.1 QVBoxLayout的使用 1.2 多个布局管理器 2、QHBoxLayout水平布局 2.1 QHBoxLayout的使用 2.2 嵌套的Layout 3、QGridLayout网格布局 3.1 QGridLayout的使用 3.2 设置控件大小比例 4、QFormLayout 4.1 QFormLayout的使用 5、…

Modbus_tcp

目录 一&#xff1a;modbus起源 1.起源 2. 分类&#xff1a; 3. 优势&#xff1a; 4. 应用场景&#xff1a; 5.ModbusTCP特点&#xff08;掌握&#xff09;&#xff1a; 二、 ModbusTCP的协议 1. 报文头 2. 寄存器 1. 线圈&#xff08;Coils&#xff09; 2. 离…

openmv与stm32通信

控制小车视觉循迹使用 OpenMV 往往是不够的。一般使用 OpenMV 对图像进行处理&#xff0c;将处理过后的数据使用串口发送给STM32&#xff0c;使用STM32控制小车行驶。本文主要讲解 OpenMV 模块与 STM32 间的串口通信以及两种循迹方案&#xff0c;分别是划分检测区域和线性回归。…

每日刷题(算法)

我们N个真是太厉害了 思路&#xff1a; 我们先给数组排序&#xff0c;如果最小的元素不为1&#xff0c;那么肯定是吹牛的&#xff0c;我们拿一个变量记录前缀和&#xff0c;如果当前元素大于它前面所有元素的和1&#xff0c;那么sum1是不能到达的值。 代码&#xff1a; #def…

第十一章 【后端】商品分类管理微服务(11.5)——增强响应

11.5 增强响应 在前后端分离的开发模式下,我们一般会统一后端的响应格式,比如自定义 Response 结构,但每个开发者可能会封装各自的 Response 结构,造成不一致,因此我们需要将响应格式统一起来,定义一个统一的标准响应格式。 11.5.1 创建响应模块 新建 yumi-etms-respon…

[PTA]7-1 藏头诗

[PTA]7-1 藏头诗 本题要求编写一个解密藏头诗的程序。 注&#xff1a;在 2022 年 7 月 14 日 16 点 50 分以后&#xff0c;该题数据修改为 UTF-8 编码。 输入格式&#xff1a; 输入为一首中文藏头诗&#xff0c;一共四句&#xff0c;每句一行。注意&#xff1a;一个汉字占三…

WPF经典面试题全集

以下是一些常见的WPF&#xff08;Windows Presentation Foundation&#xff09;经典面试题及其答案详解&#xff1a; 1. WPF 是什么&#xff1f;与 WinForms 有何区别&#xff1f; 答案&#xff1a; WPF 是 Windows Presentation Foundation&#xff0c;是微软开发的用于构建…

关系运算符

判断相等或者不等的运算符&#xff0c;一般被称为关系运算符。 相等和不相等 C/C/Java/C#使用””表示相等&#xff0c;””表示赋值&#xff0c;”!”代表不相等。C/C无法根据使用场景区分赋值和相等运算符&#xff0c;因为支持赋值运算符返回整数并作为判断条件。VB用””判…

C++编译环境(IDE)推荐及安装

IDE是什么 嗨嗨嗨&#xff0c;我又来水博文了 今天来给大家推荐几款好用的IDE IDE是集成开发环境&#xff08;Integrated Development Environment&#xff09;的缩写&#xff0c;是一种软件应用程序&#xff0c;提供了用于软件开发的各种工具和功能&#xff0c;包括代码编辑…

GPT-4论文阅读

GPT-4 Technical Report论文阅读 文章目录 GPT-4 Technical Report论文阅读 Abstract训练的稳定性Training processPredictable scaling训练的稳定性多么难能可贵 Capabilities考试成绩传统的benchmark语言方面的能力Visual inputsSteerability LimitationsRisks & mitigat…

油猴脚本抓取swagger参数,自动生成请求参数

前端开发 &#xff0c;从 swagger中获取api 以及 参数复制黏贴很麻烦 &#xff1b;写一个脚本直接生成复制需要的形式 脚本代码&#xff1a; // UserScript // name swagger.io // namespace http://tampermonkey.net/ // version 2024-09-18 // descriptio…

ATGM331C-5T杭州中科微BDS/GNSS全星座定位授时模块应用领域

ATGM331C-5T 系列模块全部支持辅助 GNSS &#xff08;AGNSS&#xff09;功能&#xff1b;支持精确秒脉冲输出&#xff0c;脉冲上升沿与 UTC 时间对齐。 产品选型&#xff1a; 性能指标&#xff1a; 出色的定位导航功能&#xff0c;支持 BDS/GPS 卫星导航系统的单系统授时&#…