日志与追踪
日志与追踪
.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 生态的 tracing。
tracing 用于给 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 已可使用。