Serilog TcpSink Не бросать исключения - PullRequest
0 голосов
/ 15 апреля 2020

Есть ли способ отследить, доступна ли конечная точка для регистрации Tcp Sink? Например, локально на моей машине у меня нет установки FileBeat, в то время как она работает на промежуточной машине.

Способ инициализации 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 отправки, но во время инициализация в порядке.

1 Ответ

1 голос
/ 15 апреля 2020

Запись в регистратор Serilog подразумевает безопасную операцию и никогда не вызывает исключений, а это предусмотрено . Таким образом, любые исключения, возникающие при отправке этих сообщений, будут появляться только в SelfLog - если вы его включите.

например

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

Приведенный выше пример, конечно, просто для иллюстрации SelfLog функция ... Вы будете выбирать, где / как отображать или хранить эти сообщения об ошибках.


Теперь, если операция, которую вы регистрируете, достаточно важна, чтобы вы захотели гарантируйте, что это успешно (или выдает исключение, если это не так), тогда вы должны использовать Audit Logging , т.е. использовать .AuditTo.TCPSink(...) вместо .WriteTo.TCPSink(...)

...