C#日志的自定义输出格式(从零开始掌握C#日志格式自定义技巧)

简介: 本文介绍C#日志记录技巧,重点讲解如何自定义日志输出格式。通过Microsoft.Extensions.Logging和NLog两种方式,实现包含时间、级别、类名等信息的个性化日志,并支持JSON、颜色高亮等格式,提升日志可读性与维护效率。

在开发 C# 应用程序时,C#日志记录技巧 是调试、监控和维护系统稳定性的关键。默认的日志输出往往不能满足我们的需求,因此掌握 C#日志格式自定义 方法显得尤为重要。本教程将手把手教你如何自定义日志输出格式,即使你是编程小白也能轻松上手!

为什么需要自定义日志格式?

默认情况下,很多日志框架(如 NLog、log4net 或 Microsoft.Extensions.Logging)会以固定格式输出日志。但在实际项目中,我们可能希望:

  • 包含时间戳、日志级别、类名、方法名等信息
  • 以 JSON 格式输出便于日志收集系统解析
  • 高亮错误信息或添加颜色区分不同级别
  • 精简输出内容以提升可读性

使用 Microsoft.Extensions.Logging 自定义格式

从 .NET Core 开始,官方推荐使用 Microsoft.Extensions.Logging 进行日志管理。虽然它本身不直接提供格式模板,但我们可以通过实现 ILoggerProviderILogger 来完全控制输出格式。

不过更简单的方式是配合控制台日志(Console Logger)使用 ConsoleFormatter(.NET 5+ 支持)。下面是一个自定义控制台日志格式的完整示例:

// Program.cs (.NET 6+ 顶级语句)using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;using Microsoft.Extensions.Logging;var builder = Host.CreateApplicationBuilder(args);// 移除默认的控制台日志提供程序builder.Logging.ClearProviders();// 添加自定义格式的控制台日志builder.Logging.AddConsole(options =>{    options.FormatterName = "CustomFormatter";});// 注册自定义格式器builder.Services.AddSingleton<ConsoleFormatter, CustomConsoleFormatter>();var host = builder.Build();// 使用日志var logger = host.Services.GetRequiredService<ILogger<Program>>();logger.LogInformation("这是一条自定义格式的日志信息。");logger.LogError("这里发生了一个错误!");host.Run();

接下来,我们需要实现 CustomConsoleFormatter 类:

using Microsoft.Extensions.Logging;using Microsoft.Extensions.Logging.Console;using System.Text;public class CustomConsoleFormatter : ConsoleFormatter{    public CustomConsoleFormatter() : base("CustomFormatter") { }    public override void Write<TState>(        in LogEntry<TState> logEntry,        IExternalScopeProvider scopeProvider,        TextWriter textWriter)    {        if (logEntry.Formatter == null)        {            return;        }        var logMessage = logEntry.Formatter(logEntry.State, logEntry.Exception);        // 构建自定义格式:[时间] [级别] [来源] - 消息        var formattedLog = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] " +                          $"[{logEntry.LogLevel}] " +                          $"[{logEntry.Category}] - {logMessage}";        // 可选:根据日志级别设置颜色        if (logEntry.LogLevel == LogLevel.Error || logEntry.LogLevel == LogLevel.Critical)        {            var originalColor = Console.ForegroundColor;            Console.ForegroundColor = ConsoleColor.Red;            textWriter.WriteLine(formattedLog);            Console.ForegroundColor = originalColor;        }        else        {            textWriter.WriteLine(formattedLog);        }    }}

使用 NLog 实现更灵活的格式控制

如果你需要更强大的功能(如文件输出、滚动日志、远程发送等),推荐使用 NLog。NLog 通过配置文件即可轻松实现 C#日志输出格式 的自定义。

首先安装 NuGet 包:

Install-Package NLog

然后创建 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"      autoReload="true"      internalLogLevel="Info"      internalLogFile="internal-nlog.txt">  <targets>    <target xsi:type="Console" name="console"            layout="[${date:format=yyyy-MM-dd HH\:mm\:ss.fff}] [${level:uppercase=true}] [${logger}] ${message} ${exception:format=tostring}" />  </targets>  <rules>    <logger name="*" minlevel="Trace" writeTo="console" />  </rules></nlog>

在代码中使用:

using NLog;class Program{    private static readonly Logger logger = LogManager.GetCurrentClassLogger();    static void Main(string[] args)    {        logger.Info("应用程序启动");        logger.Warn("这是一个警告");        logger.Error(new Exception("模拟异常"), "发生错误");    }}

总结

通过本文,你已经掌握了两种主流的 自定义日志格式教程 方法:使用 .NET 内置的 ConsoleFormatter 和使用 NLog 配置文件。无论你选择哪种方式,都能显著提升日志的可读性和实用性。

记住,良好的日志格式不仅能帮助你快速定位问题,还能为后续的日志分析和监控打下坚实基础。赶快在你的 C# 项目中实践这些 C#日志记录技巧 吧!

—— 学会自定义日志格式,让你的 C# 应用更专业、更易维护 ——

来源:

https://www.vpshk.cn/

相关文章
|
网络协议 API C#
C# 中模拟 POST 和 GET 请求的原理与实践
【1月更文挑战第4天】在现代网络应用中,HTTP请求是客户端与服务器交互的基础。其中,GET和POST是最常用的两种请求方法。本文将介绍如何使用C#语言模拟这两种请求,并解释其背后的工作原理。我们将利用.NET框架中的HttpClient类来发送请求,并处理服务器的响应。通过本文,读者将能够理解HTTP请求的基本构成,学会在C#中编写代码来模拟这些请求,进而在开发过程中实现与Web服务的交互。
|
存储 Java API
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
Android 浅度解析:mk预置AAR、SO文件、APP包和签名
2969 0
|
网络协议 C# 文件存储
C# 利用FluentFTP实现FTP上传下载功能
C# 利用FluentFTP实现FTP上传下载功能
1399 0
C# 利用FluentFTP实现FTP上传下载功能
|
C# C++
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
3076 0
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
|
6月前
|
人工智能 Linux API
OpenClaw办公技能实战指南:5款高效Skill+阿里云/本地部署+免费大模型及常见问题解答
在日常办公场景中,重复制作PPT、整理Excel表格、撰写周报、更新研究文档等事务性工作,会占用大量工作时间。OpenClaw(Clawdbot)作为可本地部署、支持任务执行的AI智能体,通过集成专业化办公技能,能够自动完成演示文稿制作、数据表格处理、文档生成与更新等任务,实现办公流程自动化。本文基于实际办公使用场景,详细介绍五款适用于职场的OpenClaw技能,同时完整提供2026年阿里云轻量服务器、本地MacOS/Linux/Windows11部署流程,以及阿里云百炼Coding Plan免费大模型API配置方法,并对部署、使用、技能集成中的常见问题进行统一解答,所有操作均面向零基础用户,
1850 1
|
Windows
[Windows] 微软.NET离线运行库合集
.NET是Windows系统必备运行框架,缺失会导致软件报错。微软.NET离线运行库合集包含多个版本,支持自动识别系统并安装推荐版本,适用于不同系统和软件需求。提供离线安装包及合集,适合无网络环境或批量部署,确保.NET应用正常运行。
5877 0
|
存储 人工智能 人机交互
Multi-Agent Orchestrator:亚马逊开源AI智能体自动协作黑科技!重构人机交互逻辑,1秒精准分配任务
Multi-Agent Orchestrator 是亚马逊开源的多智能体框架,能够动态分配代理、维护上下文、支持多种代理类型,适用于客户服务、智能交通、物流配送等复杂场景。
1419 9
Multi-Agent Orchestrator:亚马逊开源AI智能体自动协作黑科技!重构人机交互逻辑,1秒精准分配任务
|
资源调度 JavaScript API
【Vue2 / Vue3】 一个贼nb,贼强大的自定义打印插件
【Vue2 / Vue3】 一个贼nb,贼强大的自定义打印插件
14144 120
|
开发框架 Unix .NET
老程序员分享:NLog类库使用探索——详解配置
老程序员分享:NLog类库使用探索——详解配置
1113 0
|
JavaScript
Vue3警告提示(Alert)
这是一个基于 Vue 的警告提示组件 Alert,提供了成功、信息、警告和错误四种样式,并支持自定义内容、图标及操作项。
789 4
Vue3警告提示(Alert)