c# - 使用 EF Core 配置 Serilog ASP.Net Core 3.2 以记录 SQL 语句
问题描述
以前在使用时Microsoft.Extensions.Logging
我会注入,ILoggerFactory
并且.UseLoggingFactory()
在设置我的 DbContext 时如下(为简洁起见减少了);
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 生成?
解决方案
程序.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.MinimumLevel.Override("Microsoft.EntityFrameworkCore", Serilog.Events.LogEventLevel.Information)
.WriteTo.Console(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Verbose))
推荐阅读
- validation - p:selectOneRadio with required="true",如果提交未选中,不会将其 p:selectOneRadio 变为红色
- lucene - 在 Nexus 2 中搜索会产生意想不到的结果
- php - 如何从子主题运行特定页面的脚本?
- tensorflow - 使用 tensorflow.data.TextLineDataset 解析和过滤读取文本文件
- javascript - React - 单击按钮并删除列表元素
- javascript - 提取姓氏但不按字母顺序排序
- sorting - 按名称和年龄降序按列表排序
- javascript - 如何使用 javascript 关闭 html 网站?
- docker - IDE 如何索引 docker 容器中的库文件夹?
- gitlab - 为什么我的管道作业没有在 GitLab UI 中链接在一起