【问题标题】:Use Serilog with Microsoft.Extensions.Logging.ILogger将 Serilog 与 Microsoft.Extensions.Logging.ILogger 一起使用
【发布时间】:2022-05-10 19:36:56
【问题描述】:

我使用主机创建了一个 .NET Core 3.1 项目,使用 IServiceCollection 的 IoC 容器并使用来自 Microsoft.Extensions.LoggingILogger<T> 接口在整个地方实现了日志记录。我现在需要实现更高级的日志记录并决定使用 Serilog。

我认为从 .NET 内置记录器切换到 Serilog 会轻而易举。但令我惊讶的是,Serilog 正在使用它自己的ILogger 接口——真糟糕!所以现在我需要更新所有地方以使用 Serilog ILogger,或者使用 .NET Core ILogger<T> 接口实现 Serilog。

我的问题是 - 在Microsoft.Extensions.Logging 中是否真的不能将 Serilog 与 ILogger 接口一起使用?会更聪明!

【问题讨论】:

标签: c# logging .net-core serilog ilogger


【解决方案1】:

Serilog.Extensions.Logging 程序集中,IloggingBuilder 上有一个名为 AddSerilog 的扩展方法(它位于 Serilog 命名空间中),它允许您使用 Serilog 进行日志记录。例如:

.NET Core 2.2 及更早版本(使用WebHost):

WebHost.CreateDefaultBuilder(args)
    .ConfigureLogging(logging =>
    {
        logging.ClearProviders();
        logging.AddSerilog();
    });

.NET Core 3.1 及更高版本(对 Web 或控制台应用程序使用通用 Host):

Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>()})
    .UseSerilog();

现在 ILoggerILogger&lt;&gt; 实现将调用 Serilog。

【讨论】:

  • 如果你使用的是通用主机,有一个 Serilog.Extensions.Hosting 包,它有一个 UseSerilog 方法来配置 Serilog 设置
【解决方案2】:

适用于 .NET 6 及更高版本

using Serilog;

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseSerilog((ctx, lc) => lc
    .WriteTo.Console()
    .ReadFrom.Configuration(ctx.Configuration));

参考:Here

【讨论】:

    猜你喜欢
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2021-08-05
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多