【发布时间】: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.netReconnectOnError属性设置为true,因为它的默认值为false。除了设置ConnectTimeout和ConnectRetryCount值。我没有尝试过,真的不知道这是否可以解决问题。我还假设您已经仔细阅读了这个 SO 问题和答案……log4net to SQLServer : what happens if database is unavailable?……这似乎与您的问题有关。
标签: c# winforms log4net serilog