以前,在使用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:在试图激活‘Bazor.Server.Startup’时,无法解析“Microsoft.Extensions.Logging.ILoggerFactory”类型的服务。
有人能告诉我如何将Serilog LoggerFactory注入到anyone以记录SQL生成吗?
发布于 2020-12-26 19:05:45
Program.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))发布于 2021-09-28 12:15:46
您需要以以下方式包含DB上下文:
services.AddDbContext<OakfieldLeasingDataContext>(
options => options
.UseSqlServer(
connectionString,
x => x.UseNetTopologySuite())
.LogTo(Log.Logger.Information, LogLevel.Information, null));https://stackoverflow.com/questions/62300197
复制相似问题