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

C# 使用 NLog 输出日志到文件夹

  1. 在项目中使用 NuGet 安装 NLog 包以及 NLog.Config

在这里插入图片描述

  1. 配置 nlog.config

在项目的根目录下创建一个 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"xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"autoReload="true"throwExceptions="false"internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<!-- 定义日志目标 async="true" 异步写日志--><targets async="true"><!-- log_file 配置,按天生成日志文件夹,保留时间7--><target name="log_file" xsi:type="File"fileName="logs/${shortdate}/LogFile_${shortdate}.log"layout="${longdate}|${level:uppercase=true}|${message}${onexception:${newline}${exception:format=tostring}}${newline}"archiveEvery="Day"archiveNumbering="Rolling"maxArchiveDays="7"archiveAboveSize="5242880"keepFileOpen="false"concurrentWrites="true" /><!-- err_file 配置 --><target name="err_file" xsi:type="File"fileName="logs/${shortdate}/ErrorFile_${shortdate}.log"layout="${longdate}|${level:uppercase=true}|${message}${onexception:${newline}${exception:format=tostring}}${newline}"archiveEvery="Day"archiveNumbering="Rolling"archiveAboveSize="5242880"maxArchiveDays="7"keepFileOpen="false"concurrentWrites="true" /></targets><!-- 定义日志规则 --><rules><!-- 将所有输出日志和错误日志分别写入 log_file 和 err_file--><logger name="*" minlevel="Debug"  writeTo="log_file" /><logger name="*" minlevel="Error"  writeTo="err_file" /></rules>
</nlog>

配置说明:

  • fileName 属性: 使用 ${shortdate} 占位符来按天生成文件夹和日志文件名。例如,logs/${shortdate}/Logfile_${shortdate}.log 将创建一个名为 logs/2024-08-03/ 的文件夹,并在其中创建 Logfile_2024-08-03.log 文件。

  • layout属性:日志内容输出的模板

  • archiveEvery="Day": 这表示每天生成一个新的日志文件。

  • archiveNumbering="Rolling": 日志文件归档使用滚动编号,避免创建大量的备份文件。

  • maxArchiveFiles="30": 指定最多保留 30 个归档文件。如果不设置或者maxArchiveFiles值等于0,则不删除旧文件。不设置默认值:0

  • keepFileOpen="false"concurrentWrites="true": 这些设置确保文件可以在多个进程中安全写入,同时不保持文件句柄打开。

  • archiveAboveSize=“5242880”: 文件归档大小尺寸,如果单文凭超过 5242880,则重新创建一个新的文件

  • maxArchiveDays="7": 保留日志归档文件最长期限。通过设置 ·maxArchiveDays·,可以实现自动管理日志文件的归档和清理,避免日志文件过多导致存储空间的浪费。

  1. 在代码中初始化 NLog
using NLog;class Program
{private static readonly ILogger Logger = LogManager.GetCurrentClassLogger();static void Main(string[] args){Logger.Info("Application started.");// 其他代码...}
}

或者创建一个共用的写日志静态类,需要输出日志的代码逻辑处,通过调用当前静态类即可。

public static class Logger
{private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();public static void Write(string message){try{if (logger.IsInfoEnabled) // 检查日志级别是否启用{logger.Info(message);}}catch (Exception ex){// 记录异常到日志中,避免掩盖潜在问题NLog.LogManager.GetLogger("ExceptionLogger").Error(ex, "Logging failed in Write method.");}}public static void WriteDebug(string message){try{if (logger.IsDebugEnabled) // 检查日志级别是否启用{logger.Debug(message);}}catch (Exception ex){// 记录异常到日志中,避免掩盖潜在问题NLog.LogManager.GetLogger("ExceptionLogger").Error(ex, "Logging failed in WriteDebug method.");}}public static void Write(Exception ex){try{logger.Error(ex);}catch (Exception innerEx){// 记录异常到日志中,避免掩盖潜在问题NLog.LogManager.GetLogger("ExceptionLogger").Error(innerEx, "Logging failed in Write(Exception ex) method.");}}
}
http://www.lryc.cn/news/414290.html

相关文章:

  • node.js使用NodeMachineID 生成唯一UUID和注意事项
  • AI大模型在数据治理中的应用
  • 【初学人工智能原理】【12】循环:序列依赖问题
  • 【QT】无法打开QT的ui文件,出现闪退情况
  • 三、Spring-WebFlux实战案例-流式
  • html+css 实现hover双层按钮
  • SPIFFS与LittleFS的对gz文件格式的区别
  • STM32L051K8U6-开发资料
  • Markdown语法学习
  • [最短路Floyd],启动!!!
  • 7月29(信息差)
  • ubuntu中禁止使用鼠标拖动来移动文件
  • 【密码学】椭圆曲线密码体制(ECC)
  • 第25集《大佛顶首楞严经》
  • python 读写文件之 open 和 with open() 详细解析
  • 操作系统:内存----知识点
  • pfx如何配置到nginx中
  • 详细测评下搬瓦工香港CN2 GIA VPS
  • Java中的五种线程池类型
  • FFmpeg Windows安装教程
  • ‘#‘ is not followed by a macro parameter 关于宏定义的错误
  • 内网穿透--meterpreter端口转发实验
  • Python 数据类:减少样板并提高可读性
  • 家庭教育系列—北京海淀区”鸡娃“攻略
  • DLMS/COSEM中的信息安全:DLMS/COSEM安全概念(下)
  • 基于 systemc-2.3.1的virtual device 接入 qemu-arm
  • (七)自动化测试
  • 【信创】virtualbox内虚拟机连接U盘 _ 统信 _ 麒麟 _ 中科方德
  • 【2024】Datawhale AI夏令营 Task4笔记——vllm加速方式修改及llm推理参数调整上分
  • 腾讯OCR签名算法