入门日志 - 控制台
了解如何在 .NET 控制台应用程序中使用 OpenTelemetry 日志
本指南将向您展示如何在几分钟内开始在控制台应用程序中使用 OpenTelemetry .NET 日志。
先决条件
- 在您的计算机上安装了 .NET SDK
创建控制台应用程序
创建新的控制台应用程序并运行它
dotnet new console --output getting-started
cd getting-started
dotnet run
您应该会看到以下输出
Hello World!
添加 OpenTelemetry 日志
安装 OpenTelemetry Console Exporter 包
dotnet add package OpenTelemetry.Exporter.Console
使用以下代码更新 Program.cs 文件
using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Logs;
// Create a logger factory with OpenTelemetry
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(options =>
{
options.AddConsoleExporter();
});
});
// Get a logger instance
var logger = loggerFactory.CreateLogger<Program>();
// Log a simple message
logger.LogInformation("Hello from OpenTelemetry .NET Logs!");
// Log with structured data
logger.FoodPriceChanged("artichoke", 9.99);
// Log a more complex example
logger.FoodRecallNotice(
"Food & Beverages",
"Contoso",
"Salads",
"Contoso Fresh Vegetables, Inc.",
"due to a possible health risk from Listeria monocytogenes");
// Define extension methods for structured logging
internal static partial class LoggerExtensions
{
[LoggerMessage(LogLevel.Information, "Food `{name}` price changed to `{price}`.")]
public static partial void FoodPriceChanged(this ILogger logger, string name, double price);
[LoggerMessage(LogLevel.Critical, "A `{productType}` recall notice was published for `{brandName} {productDescription}` produced by `{companyName}` ({recallReasonDescription}).")]
public static partial void FoodRecallNotice(
this ILogger logger,
string productType,
string brandName,
string productDescription,
string companyName,
string recallReasonDescription);
}
再次运行应用程序(使用 dotnet run),您应该会在控制台上看到日志输出。
LogRecord.Timestamp: 2023-09-15T06:07:03.5502083Z
LogRecord.CategoryName: Program
LogRecord.Severity: Info
LogRecord.SeverityText: Information
LogRecord.Body: Food `{name}` price changed to `{price}`.
LogRecord.Attributes (Key:Value):
name: artichoke
price: 9.99
OriginalFormat (a.k.a Body): Food `{name}` price changed to `{price}`.
LogRecord.EventId: 344095174
LogRecord.EventName: FoodPriceChanged
...
LogRecord.Timestamp: 2023-09-15T06:07:03.5683511Z
LogRecord.CategoryName: Program
LogRecord.Severity: Fatal
LogRecord.SeverityText: Critical
LogRecord.Body: A `{productType}` recall notice was published for `{brandName} {productDescription}` produced by `{companyName}` ({recallReasonDescription}).
LogRecord.Attributes (Key:Value):
brandName: Contoso
productDescription: Salads
productType: Food & Beverages
recallReasonDescription: due to a possible health risk from Listeria monocytogenes
companyName: Contoso Fresh Vegetables, Inc.
OriginalFormat (a.k.a Body): A `{productType}` recall notice was published for `{brandName} {productDescription}` produced by `{companyName}` ({recallReasonDescription}).
LogRecord.EventId: 1338249384
LogRecord.EventName: FoodRecallNotice
恭喜!您现在正在使用 OpenTelemetry 收集日志。
工作原理
该程序通过实例化一个 LoggerFactory 实例来创建日志记录管道,并将 OpenTelemetry 添加为 日志提供程序。
OpenTelemetry SDK 配置了 ConsoleExporter,以将日志导出到控制台以供演示。在生产环境中使用时,应改用其他导出器,例如 OTLP Exporter。
LoggerFactory 实例用于创建 ILogger 实例,该实例用于进行实际的日志记录。
遵循 .NET 日志记录最佳实践,使用了 编译时日志源生成,它提供了高性能、结构化的日志记录和类型安全的参数。
与依赖注入一起使用
对于使用 依赖注入 (DI) 的 ILogger 的应用程序(例如 ASP.NET Core 和 .NET Worker),常见的做法是将 OpenTelemetry 添加到 DI 日志记录管道中作为 日志提供程序,而不是通过创建新的 LoggerFactory 实例来设置全新的日志记录管道。
请参阅 ASP.NET Core 入门 教程了解更多信息。