首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用EF配置Serilog ASP.Net Core3.2以记录SQL状态

用EF配置Serilog ASP.Net Core3.2以记录SQL状态
EN

Stack Overflow用户
提问于 2020-06-10 09:28:18
回答 2查看 8.9K关注 0票数 1

以前,在使用Microsoft.Extensions.Logging时,我会在设置ILoggerFactory.UseLoggingFactory()时注入DbContext,如下所示(简化为简洁);

代码语言:javascript
复制
    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如下;

代码语言:javascript
复制
    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生成吗?

EN

回答 2

Stack Overflow用户

发布于 2020-12-26 19:05:45

Program.cs

代码语言:javascript
复制
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))
票数 5
EN

Stack Overflow用户

发布于 2021-09-28 12:15:46

您需要以以下方式包含DB上下文:

代码语言:javascript
复制
services.AddDbContext<OakfieldLeasingDataContext>(
        options => options
            .UseSqlServer(
                connectionString,
                x => x.UseNetTopologySuite())
            .LogTo(Log.Logger.Information, LogLevel.Information, null));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62300197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档