繁体   English   中英

Serilog TcpSink 不抛出异常

[英]Serilog TcpSink Not throwing exceptions

有什么方法可以跟踪端点是否可用于 Tcp 接收器日志记录? 例如,在我的机器上本地我没有 FileBeat 设置,而它在 Staging 机器上工作。

我初始化 Logger 的方式

private readonly ILogger _tcpLogger;


public TcpClient(IOptions<ElasticSearchConfig> tcpClientConfig)
    {
        var ip = IPAddress.Parse(tcpClientConfig.Value.TcpClientConfig.IpAddress);

        _tcpLogger = new LoggerConfiguration()
                     .WriteTo.TCPSink(ip, tcpClientConfig.Value.TcpClientConfig.Port, new TcpOutputFormatter())
                     .CreateLogger();
    }

和简单的方法只是提交日志

public void SubmitLog(string json) 
      { 
      _tcpLogger.Information(json);
      }

就我而言,当它在本地提交 json 字符串时,它无处可去,我想得到一个例外/消息。

理想情况下在 json 上提交,但在初始化期间是可以的。

写入 Serilog 记录器是一种安全操作,绝不会抛出异常,这是设计使然。 因此,发送这些消息时发生的任何异常只会出现在SelfLog中 - 如果您启用它。

例如

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

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


现在,如果您正在记录的操作非常重要,以至于您希望保证它成功(或者如果没有成功则抛出异常),那么您应该使用Audit Logging ,即使用.AuditTo.TCPSink(...)代替.WriteTo.TCPSink(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM