无服务器可用时的 Serilog 和 seq

问题描述 投票:0回答:3

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

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

c# serilog seq
3个回答
10
投票

当使用 Serilog 和 Seq 的应用程序找不到将日志发送到的服务器时,预期的行为是什么?

这取决于您是否使用常规接收器(通过

.WriteTo
)或审核接收器(通过
.AuditTo
)。

写入常规接收器意味着是一种安全操作,并且永远不会引发异常,并且这是设计使然的。因此,如果您启用它,发送这些消息时发生的任何异常只会出现在

SelfLog
中。

例如

// Write Serilog errors to the Console
Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));

当然,上面的示例只是为了说明

SelfLog
功能...您可以选择是否/在何处/如何显示或存储这些错误消息。

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

每次尝试记录都会抛出异常吗?

这取决于水槽。在 Serilog.Sinks.Seq 的情况下,它是一个 周期性批处理接收器 ,因此它将尝试按批次

X
日志事件发送消息(
X
是可配置的),因此如果 Seq 服务器不可用,您可能会看到每个无法发送的批次都会出现错误。

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

Seq 接收器具有内存缓冲和重试支持,可以处理短期服务器或网络不可用的情况,这通常足以满足大多数应用程序的需要。

或者,Seq 接收器具有持久的日志传送,您可以在磁盘上指定一个文件,它将在磁盘上的文件中存储缓冲消息,因此即使您的应用程序重新启动,它也可以重试。

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

最后,另一种选择是使用 Seq Forwarder,您可以与您的应用程序并行安装(即同一服务器),并将日志直接写入其中,它负责将它们保存到自己的内部本地存储中并在远程 Seq 服务器可用时将其转发到该服务器。

diagram Seq Forwarder


4
投票

Serilog 强有力地保证永远不会抛出日志线程(像您引用的转发异常是通过

SelfLog
发出的)

这并不常见,并且/或没有自然的方式可以开箱即用地说“Seq但回退到文件” - 批处理接收器保存东西并最终丢弃东西以避免内存不足。

如果您正在考虑您真正想要的关于文件和/或服务器的语义,https://github.com/serilog/serilog-sinks-async的自述文件可能值得一读。 (也许,如果您位于具有运行状况检查的托管环境中,您可能会认为无法转发日志是健康状况不佳的指标 - 在这种情况下,明显的问题是任何替换实例都可能不会表现得更好)。另外,这个最佳实践指南可能会帮助您思考您真正想要的东西。

不幸的是,您最好将问题分成单独的问题,以帮助在这里实际回答。


0
投票

不确定是否可以在 Serilog 中实现以下功能,但是使用 NLog 我只需在

RetryingWrapper
内添加一个
BufferingWrapper
包装器:

"targets": {
  "Seq": {
    "type": "BufferingWrapper",
    "bufferSize": 2000,
    "flushTimeout": 1000,
    "slidingTimeout": false,
    "target": {
      "type": "RetryingWrapper",
      "retryCount": 999,
      "RetryDelayMilliseconds": 5000,
      "target": {
        "type": "Seq",
        "serverUrl": "http://localhost:7777"
      }
    }
  }

这允许

BufferingWrapper
继续构建,直到成功将缓冲区中的所有日志发送到 Seq。

© www.soinside.com 2019 - 2024. All rights reserved.