当使用 Serilog 和 Seq 的应用程序找不到将日志发送到的服务器时,预期的行为是什么?每次尝试记录都会抛出异常吗?
我希望我的应用程序使用 Seq 服务器(如果可用),但如果不可用,仍继续运行并记录到文件。
Cai*_*ete 10
当使用 Serilog 和 Seq 的应用程序找不到将日志发送到的服务器时,预期的行为是什么?
这取决于您使用的是常规接收器(通过.WriteTo)还是审计接收器(通过.AuditTo)。
写入常规接收器意味着是一个安全的操作,并且永远不会抛出异常,这是设计使然。因此,发送这些消息时发生的任何异常只会在SelfLog您启用它时出现。
例如
// Write Serilog errors to the Console
Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));
Run Code Online (Sandbox Code Playgroud)
当然,上面的示例只是为了说明该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();
Run Code Online (Sandbox Code Playgroud)
最后,另一种选择是使用Seq Forwarder,您可以与应用程序并行安装(即同一服务器),并将日志直接写入其中,它负责将日志保存到自己的内部本地存储并转发它们当远程 Seq 服务器可用时。
| 归档时间: |
|
| 查看次数: |
2065 次 |
| 最近记录: |