当前位置: 首页> 游戏> 评测 > C# 使用 NLog 输出日志到文件夹

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

时间:2025/7/9 12:10:16来源:https://blog.csdn.net/weixin_39237340/article/details/140901677 浏览次数:0次
  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>

实现异步写入的另外一种配置:

<?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"><targets><!-- log_file 配置,按天生成日志文件夹,保留时间7--><target  name="logfile"  xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard"><target xsi:type="File"fileName="logs/${shortdate}/ZJNLogFile_${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" /></target><target  name="errfile"  xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard"><!-- err_file 配置 --><target xsi:type="File"fileName="logs/${shortdate}/ZJNErrorFile_${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" /></target></targets><rules><logger name="*" minlevel="Debug"  writeTo="logfile" /><logger name="*" minlevel="Error"  writeTo="errfile" /></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.");}}
}
关键字:C# 使用 NLog 输出日志到文件夹

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: