C# 没有可用服务器时的Serilog和seq

C# 没有可用服务器时的Serilog和seq,c#,serilog,seq,C#,Serilog,Seq,当使用Serilog和Seq的应用程序找不到要将日志发送到的服务器时,预期的行为是什么?每次尝试记录日志都会引发异常吗 我希望我的应用程序使用Seq服务器(如果可用),但如果不可用,仍将继续运行并登录到文件 Serilog有一个强大的保证,保证永远不会抛出日志线程() 这并不常见,也没有现成的自然方式来说“Seq但返回到文件”——批处理槽保存东西并最终丢弃东西以避免内存不足 如果您正在考虑关于文件和/或服务器的真正语义,的自述可能值得一读。(也许如果你在一个托管的EnV中进行健康检查,你可能会认

当使用Serilog和Seq的应用程序找不到要将日志发送到的服务器时,预期的行为是什么?每次尝试记录日志都会引发异常吗

我希望我的应用程序使用Seq服务器(如果可用),但如果不可用,仍将继续运行并登录到文件


Serilog有一个强大的保证,保证永远不会抛出日志线程()

这并不常见,也没有现成的自然方式来说“Seq但返回到文件”——批处理槽保存东西并最终丢弃东西以避免内存不足

如果您正在考虑关于文件和/或服务器的真正语义,的自述可能值得一读。(也许如果你在一个托管的EnV中进行健康检查,你可能会认为无法将日志转发为不良健康的指标——在这种情况下明显的问题是,任何替换实例可能都不会好起来)。这也可能帮助你思考你真正想要什么

不幸的是,你最好把你的问题分成几个单独的问题,以帮助你真正回答这里的问题

当使用Serilog和Seq的应用程序找不到要将日志发送到的服务器时,预期的行为是什么? 这取决于您使用的是常规接收器(通过
.WriteTo
)还是审核接收器(通过
.AuditTo

向常规接收器写入意味着是一种安全的操作,并且永远不会抛出异常。因此,发送这些消息时发生的任何异常只有在启用时才会出现在
SelfLog

e、 g

当然,上面的示例只是为了说明
SelfLog
功能。。。您可以选择是否/在何处/如何显示或存储这些错误消息

在写入审核接收器时,您可能会看到每条失败消息的错误

每次尝试记录日志都会引发异常吗? 这取决于水槽。在的情况下,它是一个,因此它将尝试批量发送
X
日志事件(
X
是可配置的),因此,如果Seq服务器不可用,则每个未能发送的批次都会出现错误

我希望我的应用程序使用Seq服务器(如果可用),但如果不可用,仍将继续运行并登录到文件。 Seq sink具有内存缓冲和重试支持,可以处理服务器或网络的短期不可用,这对于大多数应用程序来说已经足够了

或者,您可以指定一个磁盘上的文件,将缓冲消息存储在磁盘上的文件中,这样即使应用程序重新启动,它也可以重试

Log.Logger = new LoggerConfiguration()
    .WriteTo.Seq("https://my-seq-server:5341",
        bufferBaseFilename: @"C:\MyApp\Logs\myapp") // <<<<<<
    .CreateLogger();
Log.Logger=new LoggerConfiguration()
.WriteTo.Seq(“https://my-seq-server:5341",

bufferBaseFilename:@“C:\MyApp\Logs\MyApp”)//谢谢您的回答!并不是我想让我的Seq回到文件中。我希望它总是登录到文件,如果有人在没有访问Seq服务器的情况下运行该应用程序,我不希望该应用程序仍然工作。这是可能的,还是转发机制最终会耗尽内存并失败?啊,在这种情况下,您可以a)配置两个接收器b)如果无法访问,Seq sink将丢弃内容。或者,您可以使用命令行开关并提供seq内点(或者让env var的存在/不存在执行相同的任务)。这包括不需要同时硬编码seq端点。和往常一样,答案非常详细和全面!回答得很好,我真的很感谢你的努力。非常感谢。
Log.Logger = new LoggerConfiguration()
    .WriteTo.Seq("https://my-seq-server:5341",
        bufferBaseFilename: @"C:\MyApp\Logs\myapp") // <<<<<<
    .CreateLogger();