-
Notifications
You must be signed in to change notification settings - Fork 889
Expand file tree
/
Copy pathProgram.cs
More file actions
69 lines (54 loc) · 2.48 KB
/
Copy pathProgram.cs
File metadata and controls
69 lines (54 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
using Microsoft.Extensions.Logging;
using OpenTelemetry;
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;
// Create two OTLP exporters pointing at different destinations.
var otlpExporter1 = new OtlpLogExporter(new OtlpExporterOptions
{
Endpoint = new Uri("http://localhost:4317"), // OTLP destination 1
});
var otlpExporter2 = new OtlpLogExporter(new OtlpExporterOptions
{
Endpoint = new Uri("http://localhost:4318"), // OTLP destination 2
});
// Wrap each exporter in a BatchLogRecordExportProcessor.
var defaultExportProcessor = new BatchLogRecordExportProcessor(otlpExporter1);
var paymentExportProcessor = new BatchLogRecordExportProcessor(otlpExporter2);
// Build the routing processor. Logs whose category name starts with
// "Payment." are sent to OTLP2; everything else goes to OTLP1.
var routingProcessor = new RoutingProcessor(
categoryPrefix: "Payment.",
defaultProcessor: defaultExportProcessor,
paymentProcessor: paymentExportProcessor);
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddProcessor(routingProcessor);
// Optional: also add a console exporter so you can see all logs locally.
logging.AddConsoleExporter();
});
});
// Both loggers share the same ILoggerFactory / LoggerProvider pipeline.
var orderLogger = loggerFactory.CreateLogger("Order.Processing");
var paymentLogger = loggerFactory.CreateLogger("Payment.Processing");
// --- Logs from "Order.Processing" --> routed to OTLP1 ---
orderLogger.ProcessingOrder("ORD-001");
// --- Logs from "Payment.Processing" --> routed to OTLP2 ---
paymentLogger.ProcessingPayment("PAY-001");
// --- Another order log --> routed to OTLP1 ---
orderLogger.OrderCompleted("ORD-001");
// Dispose logger factory before the application ends.
// This will flush the remaining logs and shutdown the logging pipeline.
loggerFactory.Dispose();
internal static partial class LoggerExtensions
{
[LoggerMessage(LogLevel.Information, "Processing order {OrderId}.")]
public static partial void ProcessingOrder(this ILogger logger, string orderId);
[LoggerMessage(LogLevel.Information, "Processing payment {PaymentId}.")]
public static partial void ProcessingPayment(this ILogger logger, string paymentId);
[LoggerMessage(LogLevel.Information, "Order {OrderId} completed.")]
public static partial void OrderCompleted(this ILogger logger, string orderId);
}