mor*_*eng 18 c# logging serilog .net-core ilogger
我已经使用 Host 创建了一个 .NET Core 3.1 项目,IoC 容器IServiceCollection使用ILogger<T>来自Microsoft.Extensions.Logging. 我现在需要实现更高级的日志记录并决定使用 Serilog。
我认为从 .NET 内置记录器切换到 Serilog 会轻而易举。但令我惊讶的是,Serilog 正在使用它自己的ILogger界面——太糟糕了!所以现在我需要更新所有地方以使用 Serilog ILogger,或者使用 .NET CoreILogger<T>接口实现 Serilog 。
我的问题是 - 真的不可能将 Serilog 与 ILogger 接口一起使用Microsoft.Extensions.Logging吗?会聪明很多!
Shu*_*min 30
对于 .NET 6 及更高版本
using Serilog;
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog((ctx, lc) => lc
    .WriteTo.Console()
    .ReadFrom.Configuration(ctx.Configuration));
参考:这里
Sea*_*ean 22
在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 及更高版本(Host对 Web 或控制台应用程序使用泛型):
Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>()})
    .UseSerilog();
现在ILogger和ILogger<>实现将调用 Serilog。
vib*_*006 11
除了使用builder.host.UseSeriLog()扩展方法之外的方法。这是更优雅的方式(我们可以在外部控制台或单元测试 ILogger 中使用,而无需实现主项目)。
Serilog.Extensions.Logging和 core 包Serilog。Log.Logger = new LoggerConfiguration).WriteTo.Console().CreateLogger()。ILoggerFactory扩展方法AddSeriLog()ILoggerFactory factory = new LoggerFactory().AddSerilog(Log.Logger);factory.CreateLogger<T>();public static Microsoft.Extensions.Logging.ILogger LoggingInstance<T>()
{
  Serilog.Log.Logger = Serilog.Log.Logger ?? new LoggerConfiguration().WriteTo.(xxxxYourSinksxxxx).CreateLogger();
  ILoggerFactory factory = new LoggerFactory().AddSerilog(Log.Logger);            
  return factory.CreateLogger<T>();
}
它的用法就像
var logger = LoggingInstance<YourModel>();
| 归档时间: | 
 | 
| 查看次数: | 11304 次 | 
| 最近记录: |