I have created my custom ILogger
and it is working fine with console application. Now I have added reference to OpenTelemetry
in my project and I found that Log messages that are displayed on console are not logged in my custom ILogger. How can I integrate my custom ILogger
to configuration pipeline of OpenTelemetry
?
My project contains these classes
[ProviderAlias("CsvLoggerConfigSection")]
internal sealed class CsvLoggerProvider : ILoggerProvider
{
// implementation
}
public class CsvILogger : ILogger
{
// implementation
}
internal class CsvTraceListener : TraceListener
{
// implementation
}
public static class CsvLoggerExtensions
{
public static ILoggingBuilder AddCsvLogger(this ILoggingBuilder builder)
{
// implementation
}
public static ILoggingBuilder AddCsvLogger(this ILoggingBuilder builder,Action<CsvLoggerOptions> configure)
{
// implementation
}
}
public static class CsvLoggerRegistration
{
public static IHostBuilder RegisterCsvLogger(this IHostBuilder builder)
{
// implementation
}
public static IHost RegisterCsvLoggerWithTraceListener(this IHost host)
{
Trace.AutoFlush = true;
var factory = host.Services.GetRequiredService<ILoggerFactory>();
Trace.Listeners.Add(new CsvTraceListener(factory));
return host;
}
}
And my ConsoleApp program.cs is like
using OpenTelemetry;
using OpenTelemetry.Trace;
Package Ref:
OpenTelemetry
OpenTelemetry.Exporter.Console
OpenTelemetry.Instrumentation.Http
static async Task Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.RegisterCsvLogger()
.Build()
.RegisterCsvLoggerWithTraceListener();
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Sample.Console")
.AddHttpClientInstrumentation()
.AddConsoleExporter() //How can I add my custom ILogger "CsvLogger" in this pipeline?
.Build();
await CallWebEndpoint();
}