【问题标题】:Serilog, no error even if log file cannot be opened / createdSerilog,即使无法打开/创建日志文件也不会出错
【发布时间】:2019-02-05 02:25:40
【问题描述】:

我正在研究将 Serilog 作为 log4net 的替代品(我有一个问题,即 log4net 停止记录而没有明确的方法可以从中恢复)。这是c#,主要是WinForms。

首先,这里是 app.config 设置:

<add key="serilog:write-to:RollingFile.pathFormat" value="q:\SomeApp-%COMPUTERNAME%-log-{Date}.txt" />
<add key="serilog:write-to:RollingFile.outputTemplate" value="{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level}] {Message}{NewLine}{Exception}" />
<add key="serilog:write-to:File.rollOnFileSizeLimit" value="true" />
<add key="serilog:write-to:File.fileSizeLimitBytes" value="10485760" />
<add key="serilog:write-to:File.retainedFileCountLimit" value="10" />
<add key="serilog:minimum-level" value="Information" />

在 C# 应用程序中,我这样创建记录器:

Log.Logger = new LoggerConfiguration()
                .ReadFrom.AppSettings()
                .CreateLogger();

问题:即使我在上面的“serilog:write-to:RollingFile.pathFormat”中指定了无效路径,CreateLogger 也没有给出任何问题的指示,但当然没有任何记录。

日志记录很重要,所以如果它不起作用,我需要了解它。我怎么知道?

【问题讨论】:

  • 我不熟悉 Serilog,但是,我经常使用 log4net,几乎所有情况下,log4net 停止记录是因为代码崩溃或系统类型故障。我很好奇你是否知道“为什么”log4net 停止记录?如果是崩溃,那么您应该修复它,因为任何内部记录器都会停止记录。是否可以用一些代码演示 log4net “停止记录”而无法恢复?
  • @JohnG 我过去也看到过同样的情况(例如,如果备份软件暂时锁定其中一个文件以供读取,而日志文件通过重命名滚动,它最终可能会冻结日志记录永久(是的,这似乎很疯狂 - 话虽如此,这是 14 年前,也许他们已修复它!))(Serilog 不会重命名,并且不会以会导致它永久失败的方式编写)
  • @JohnG,我有一个单独的问题。 log4net(我宁愿让它工作而不是切换到不同的记录器):stackoverflow.com/questions/54526848/…
  • 看了你的原帖后,我相信这可能超出了我的技能水平。但是,据我了解,“共享”驱动器用于放置日志文件。有时,当记录器试图写入时,这个“共享”驱动器会丢失。我猜这可能只是“任何”记录器的情况,您可能最终会在同一条船上尝试不同的记录器。显然,这只是一个评论,因为我真的不知道从经验中,所以我想这肯定不会伤害。
  • 我猜你可能已经尝试在连接字符串中将log4.net ReconnectOnError 属性设置为true,因为它的默认值为false。除了设置ConnectTimeoutConnectRetryCount 值。我没有尝试过,真的不知道这是否可以解决问题。我还假设您已经仔细阅读了这个 SO 问题和答案……log4net to SQLServer : what happens if database is unavailable?……这似乎与您的问题有关。

标签: c# winforms log4net serilog


【解决方案1】:

Serilog 与大多数典型记录器一样,默认情况下不会阻碍应用程序的进度。有一个 .Audit.To 配置机制可以做到这一点,但它不太可能成为你的答案。

一般来说,将Serilog's SelfLog 连接到故障安全接收器是最好管理日志系统中突出显示故障的方法。

除此之外:您似乎也在混合 RollingFile 和文件配置 - File 已取代前者,因此建议仅将其用于新系统。

【讨论】:

  • 对于某些应用程序,日志记录非常重要,以至于应用程序在日志记录再次工作之前不应继续处理。在我上面的测试用例中,我故意指定了一个不存在的驱动器的路径并且没有任何迹象表明有任何问题(尽管如果路径格式无效,它会抛出异常,例如“ABC:\ temp.txt”) .如果您知道更适合我需要的记录器,请告诉我...
  • @lars335 我理解并感谢您的关注;但是,这是一个单独的辩论;底线是大多数记录器do 按照惯例具有我描述的语义。 而且,如上所述,有一种机制可以赋予它你的语义 - AuditTo 机制。我强烈建议您点击链接并阅读 - Serilog 具有广泛的用途并且非常有弹性,但它只是一个记录器。关于是否提供除 SelfLog 之外的方法来确定配置是否完全损坏可能存在争议 - 也许the serilog gitter 是这样做的地方
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多