亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

.NET中的日志記錄:最佳實踐及你為何會愛上它

標簽:
架構 .NET

日志记录是软件开发中那些看似并不那么激动人心的事情之一——直到出现问题时。这时你才会意识到,结构合理的日志可以节省数小时的调试和挫败感。在.NET中,日志记录变得更为灵活和强大,特别是利用了微软内置的日志框架。再加上我最喜欢的Serilog,你就可以得到一个既实用又贴心的日志记录方案。

这里是如何开始在.NET中进行日志记录的指南,一些最佳做法,以及为何应集成Serilog以获得最佳日志记录体验。

为什么日志记录很重要?

日志记录就像为未来的你(或你的团队)留下踪迹,当出现问题时,你可以循着这些踪迹追踪。它有以下帮助:就像在迷宫中丢下小面包屑做标记一样。

  1. 故障排除: 快速定位问题发生的地点。
  2. 监控: 了解应用在生产环境中的表现。
  3. 审计: 记录重要事件或交易,确保可追溯。
  4. 性能分析: 通过计时关键操作来发现性能瓶颈。

好的日志记录习惯可以将“这东西不好用!”转变为“啊哈,我知道这是怎么回事了!”

为什么不用微软自带的日志记录工具呢?

.NET 内置的日志记录框架非常灵活多用。它可以与多种日志提供程序无缝集成,比如控制台、文件或外部服务等,如 Serilog、NLog 或 Application Insights。

几个关键好处:

  • 易用性: 内置即可上手 — 开始时无需额外的库。
  • 可扩展性: 可以接入像 Serilog 这样的高级日志框架。
  • 标准化: 单一的 API 简化了您的应用程序中的代码和培训。

现在,我们来举个例子。

在控制台应用程序中开始记录日志:

首先,使用 .NET 9 创建一个新的控制台应用。我们将使用 Microsoft.Extensions.HostingMicrosoft.Extensions.DependencyInjection 来设置我们的应用。如果你还不熟悉 HostApplicationBuilder,可以参考 Microsoft 的文档 获取快速入门。

第一步:准备主机
using Microsoft.Extensions.Hosting;  // 使用Microsoft.Extensions.Hosting;

// 定义一个builder变量...
var builder = Host.CreateApplicationBuilder(args);  
// 添加托管服务
builder.Services.AddHostedService<MyCustomHostedService>();  
// 构建应用程序
var app = builder.Build();  
// 等待应用程序异步运行
await app.RunAsync();

第2步:添加托管

托管服务是演示日志记录实际效果的理想方式。添加一个名为 MyCustomHostedService 的服务。

using Microsoft.Extensions.Hosting;  

/// <summary>
/// 自定义的服务宿主类,实现了IHostedService接口。
/// </summary>
public class MyCustomHostedService : IHostedService  
{  
    /// <summary>
    /// 开始异步方法,用于启动服务。
    /// </summary>
    /// <param name="cancellationToken">取消令牌</param>
    /// <returns>返回Task.CompletedTask,表示任务已完成。</returns>
    public Task StartAsync(CancellationToken cancellationToken)  
    {  
        return Task.CompletedTask;  
    }

    /// <summary>
    /// 停止异步方法,用于停止服务。
    /// </summary>
    /// <param name="cancellationToken">取消令牌</param>
    /// <returns>返回Task.CompletedTask,表示任务已完成。</returns>
    public Task StopAsync(CancellationToken cancellationToken)  
    {  
        return Task.CompletedTask;  
    }  
}
为服务添加日志记录

现在来给 MyCustomHostedService 加个日志吧。

步骤 3:添加日志记录器

将类定义为部分类,并在主构造器中注入 ILogger。

    public partial class MyCustomHostedService(ILogger<MyCustomHostedService> logger) : IHostedService  
    {  
    }

步骤 4:添加一个静态部分日志类:

为了整理日志消息,请使用 LoggerMessage 属性来。这样源代码生成器就可以在构建时生成高效的日志代码。

    private static partial class Log
    {
        [LoggerMessage(EventId = 1, Level = LogLevel.Information,
          Message = "启动了 MyCustomHostedService")]
        public static partial void StartingMyCustomHostedService(ILogger logger);

        [LoggerMessage(EventId = 2, Level = LogLevel.Information,
          Message = "停止了 MyCustomHostedService")]
        public static partial void StoppingMyCustomHostedService(ILogger logger);
    }
步骤 5:记录日志信息

服务启动和停止时的这些日志信息。

    public Task StartAsync(CancellationToken cancellationToken)  
    {  
        Log.启动自定义托管服务(logger, this);  
        return Task.CompletedTask;  
    }  

    public Task StopAsync(CancellationToken cancellationToken)  
    {  
        Log.停止自定义托管服务(logger, this);  
        return Task.CompletedTask;  
    }
异常日志记录

异常确实会发生,你的日志应该有助于诊断这些异常。在 StartAsync 方法里添加异常日志。

    public Task StartAsync(CancellationToken cancellationToken)  
    {  
        try  
        {  
            // 启动MyCustomHostedService异步方法
            Log.启动MyCustomHostedService(_logger);  
            throw new Exception("启动MyCustomHostedService时发生错误");  
        }  
        catch (Exception ex)  
        {  
            Log.启动MyCustomHostedService时出错(_logger, ex);  
            throw;  
        }  
    }

在错误日志中记录消息:

[LoggerMessage(EventId = 3, Level = LogLevel.Error,   
Message = "启动 MyCustomHostedService 时出错")]  
public static partial void ErrorStartingMyCustomHostedService(ILogger logger,   
Exception exception)

全球日志信息

定义一个可以重用的日志消息的全局静态类:

    public static partial class 全局日志记录  
    {  
        [LoggerMessage(EventId = 1, Level = LogLevel.Information,   
          Message = "消息内容为全局日志消息")]  
        public static partial void 记录全局日志消息(ILogger logger);  
    }

你可以在应用程序的任何地方使用它。

结尾啦

日志记录是任何健壮应用程序的基石。借助 .NET 内置的日志框架和少许 Serilog,您可以轻松创建一个易于维护、可扩展且有效的解决方案。记住,优秀的日志可以减少麻烦并更快地解决问题。未来的你会感激现在的自己。

你可以在下一个项目中试试看。别忘了记录你的进度哦!

附注:我在我的 Blazor 博客文章中也利用了这个日志机制。想不想看看实际效果?从这里开始吧:
现代网页托管中的冒险

这是一张图片,点击这里可以跳转到链接: 图片链接

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消