【问题标题】:Serilog WriteTo SQL Server - LoggerConfiguration issueSerilog WriteTo SQL Server - LoggerConfiguration 问题
【发布时间】:2021-04-24 18:08:43
【问题描述】:

WriteTo 选项不起作用,无法在数据库中查看日志消息。 试图找出导致此问题的原因。显示推荐使用WriteTo

另外,AuditToWriteTo 有什么区别

  new LoggerConfiguration().ReadFrom
                           .Configuration(configObject)
                           .WriteTo
                           .Logger(log => log.WriteTo.MSSqlServer(connectionString, "LogMessages", columnOptions: logMessagesColumnOptions)
                           .Filter
                           .ByIncludingOnly(t => LogMessagesOptions.Contains(t.Level)))   
                           .Enrich.With(enrichersArray)
                           .Enrich.FromLogContext()
                           .CreateLogger();

【问题讨论】:

标签: asp.net-core serilog asp.net-core-3.0


【解决方案1】:

您可以采取许多措施来帮助您排除消息未写入 Serilog Sink 的原因。您可以在 SO 的另一个答案中看到其中的几个:

Serilog MSSQL Sink doesn't write logs to database


回复:WriteToAuditTo 的区别是 reliability。如果您使用WriteTo 并发生错误,您的应用程序将继续运行(Serilog 不会抛出异常)并且日志消息可能会丢失。如果您使用AuditTo 并发生错误,则会引发异常,您的应用程序将不得不处理它。你可以read more about Audit Logging here

【讨论】:

  • 语法似乎是正确的,但它不使用WriteTo创建日志消息
【解决方案2】:

我在使用 Serilog 登录数据库时也有类似的经历。我意识到直到浏览器关闭后才写入日志,即调用 Log.CloseAndFlush() 时。这对我来说是个问题,因为调用日志记录方法后的下一个任务取决于立即写入的日志,因为它从数据库中检索记录的记录。然而,当它试图获取应该记录的记录时,它会得到null,因为记录被延迟到程序终止。 我最初使用的是 WriteTo,并决定改用 AuditTo。这立即解决了这个问题。 AuditTo 和 WriteTo 之间的主要区别在于 AuditTo 确保在执行下一个任务之前记录事件成功,但 WriteTo 没有。此外,WriteTo 静默失败,即如果出现阻止日志记录的问题,则执行下一个任务而不会引发异常。 AuditTo 不这样做。如果由于任何原因无法写入日志,则会引发异常。 AuditTo 最适合您无法承受丢失记录且记录顺序很重要的情况。

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多