【问题标题】:Custom Logger Provider being excluded by SerilogSerilog 排除了自定义记录器提供程序
【发布时间】:2018-06-19 09:59:10
【问题描述】:

Serilog 效果很好,但我注意到它似乎排除了我设置的任何自定义记录器提供程序。

当我在 Startup 中有 UseSerilog() 时,我的 CustomProvider 永远不会被创建(CreateLogger 永远不会被调用)。

是否仍然可以在 Serilog 中使用自定义提供程序?

//class Program, Main Method
WebHost.CreateDefaultBuilder(args)
    .UseConfiguration(config)
    .UseSerilog() //after adding this, my Custom Logger never gets called 
    .UseStartup<Startup>()
    .Build();


//class Startup
public void Configure(IApplicationBuilder app, ILoggerFactory logger, IServiceProvider serviceProvider)
{
    logger.AddProvider(new CustomProvider(serviceProvider));
}

public class CustomProvider : ILoggerProvider
{
    private readonly IServiceProvider _serviceProvider;

    public void Dispose()
    {
    }

    public CustomProvider(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    //--------------never gets called---------------
    public ILogger CreateLogger(string categoryName)
    {
        var logger = _serviceProvider.GetService<CustomLogger>();
        logger.LogLevel = LogLevel.Error;

        return logger;
    }
}

【问题讨论】:

    标签: c# logging asp.net-core asp.net-core-mvc serilog


    【解决方案1】:

    您需要将自定义提供程序插入 Serilog(作为接收器)。 Serilog 替换了整个默认的日志记录管道以提高效率,因此没有两组级别控件和过滤器需要保持同步。

    这篇文章有背景:https://nblumhardt.com/2017/08/use-serilog/

    【讨论】:

    • 感谢您的回答。有关于将 ASP.NET Core 依赖注入与自定义 Serilog 接收器集成的资源吗?我想在我的接收器中注入一些服务。
    • 不客气。手头上什么都没有,但我猜有人会在某个地方有一个食谱 - 一切顺利!
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2012-07-03
    相关资源
    最近更新 更多