Я использую Serilog.Чтобы избежать настройки в каждом микросервисе, я создаю частный пакет NuGet с расширением, например
namespace DFX.Logging
{
public static class Extensions
{
public static IWebHostBuilder UseLogging(this IWebHostBuilder webHostBuilder) =>
webHostBuilder.UseSerilog((context, loggerConfiguration) =>
{
var logLevel = context.Configuration.GetValue<string>("Serilog:MinimumLevel");
if (!Enum.TryParse<LogEventLevel>(logLevel, true, out var level))
{
level = LogEventLevel.Information;
}
loggerConfiguration.Enrich
.FromLogContext()
.MinimumLevel.Is(level);
loggerConfiguration
.ReadFrom.Configuration(context.Configuration)
.WriteTo.Console(
theme: AnsiConsoleTheme.Code,
outputTemplate: "[{Timestamp:yy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}");
});
}
}
в контроллере (или где-то еще), я создаю регистратор
private readonly ILogger _logger = Log.ForContext<Application>();
, который мне нужно добавить, используяusing Serilog;
.Я хочу избежать этого и использовать только мое пространство имен using DFX.Logging;
.Как я могу разбогатеть это?Что я пробовал до сих пор:
namespace DFX.Logging
{
// custom wrapper
public static class Log
{
public static ILogger ForContext<TSource>()
{
return (ILogger)Serilog.Log.ForContext<TSource>();
}
}
public interface ILogger : Serilog.ILogger
{
}
}
Затем код успешно компилируется, но во время выполнения я получил
'Невозможно привести объект типа' Serilog.Core.Logger 'набрать 'DFX.Logging.ILogger'. '
Я понимаю, что не могу привести Serilog.Core.Logger
к своему логгеру, потому что Serilog.Core.Logger
не реализует DFX.Logging.ILogger
, но как это можно реализовать?