【发布时间】:2020-06-10 09:28:18
【问题描述】:
以前在使用Microsoft.Extensions.Logging 时,我会在设置我的DbContext 时注入ILoggerFactory 和.UseLoggingFactory(),如下所示(为简洁起见减少了);
private readonly ILoggerFactory LoggerFactory;
public Startup(... ILoggerFactory loggerFactory)
{
LoggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
}
public void ConfigureServices(IServiceCollection services)
{
var connectionString = Configuration.GetConnectionString($"DbDataContext");
services.AddDbContext<OakfieldLeasingDataContext>(
options => options
.UseSqlServer(
connectionString,
x => x.UseNetTopologySuite())
.UseLoggerFactory(LoggerFactory));
}
我现在正在尝试换入Serilog,我已成功更改我的Program.cs,如下所示;
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console(new RenderedCompactJsonFormatter())
.WriteTo.File(new RenderedCompactJsonFormatter(), "./logs/log.ndjson")
.CreateLogger();
try
{
Log.Information("Starting up");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Application start-up failed");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
并且可以成功确认日志正在进入日志文件。但是,使用现有代码,我收到以下错误;
System.InvalidOperationException:尝试激活“Blazor.Server.Startup”时无法解析“Microsoft.Extensions.Logging.ILoggerFactory”类型的服务。
谁能告诉我如何将 Serilog LoggerFactory 注入 EF Core 以记录 SQL 生成?
【问题讨论】:
-
在 3.0 中,他们进行了更改以限制您可以注入 Startup 的类型。这是一个误导性的功能,因为它使用了一个完全独立于应用程序其余部分的 DI 容器。您仍然可以将 ILogger
直接注入到您的 Configure 方法中,但不再注入到构造函数或 ConfigureServices 中 -
@viveknuna 谢谢你的评论,你能建议我如何注入工厂来记录 SQL 语句吗?
-
赞这个
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddSerilog(); -
嗯,好的,但我需要在
ConfigureServices中的点添加,以便在为 EF Core 配置DbContext时添加记录器? -
对不起,我没有找到你
标签: c# entity-framework-core serilog blazor-server-side