cratosw

日志与追踪

日志与追踪

.NET 提供了多种日志 API。在大多数场景中,ILogger 是一个稳妥的默认选择, 因为它可以接入内置和第三方日志提供器。下面是一个 C# 结构化日志最小示例:

using Microsoft.Extensions.Logging;

using var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
var logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Hello {Day}.", "Thursday"); // Hello Thursday.

在 Rust 中,log 提供了一个轻量日志门面。与 ILogger 相比, 它的能力更基础,例如暂未提供稳定的结构化日志或日志作用域。

如果需要更接近 .NET 体验的能力,可以使用 Tokio 生态的 tracingtracing 用于给 Rust 应用做埋点,采集结构化、事件驱动的诊断信息。 tracing_subscriber 可用于实现和组合不同的订阅器。 上面的结构化日志示例在 tracing 中可以写成:

fn main() {
    // install global default ("console") collector.
    tracing_subscriber::fmt().init();
    tracing::info!("Hello {Day}.", Day = "Thursday"); // Hello Thursday.
}

OpenTelemetry 提供了用于埋点、生成、收集、导出可观测数据 的一整套工具、API 与 SDK。撰写本文时,OpenTelemetry Logging API 还不稳定,Rust 实现也暂未支持日志, 但 tracing API 已可使用。

On this page