Serilog Network.Sink json выходной формат - PullRequest
0 голосов
/ 11 апреля 2020

Я использую Serilog для входа в локальный файл, и у него есть приятная и простая функция выбора шаблона вывода,

, например:

  _logger = new LoggerConfiguration()
                  .WriteTo.File(
                      Path.Combine(config.Value.FilePath, config.Value.FileName),
                      outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss}] {Message:lj}{NewLine}",
                      rollingInterval: RollingInterval.Day
                  ).CreateLogger();

И сейчас, что я пытаюсь для этого нужно использовать Serilog для сетевого журналирования, например:

    var ip = IPAddress.Parse(config.Value.ServerIp);

        _logger = new LoggerConfiguration()
                  .WriteTo.TCPSink(ip, config.Value.Port)
                  .CreateLogger();

И если я регистрируюсь так:

var message = new { to_index = "test-index", message  = "test-message" };

            var json = JsonConvert.SerializeObject(message, Formatting.Indented);

            log.Information(json);

Вывод на плате кибана будет выглядеть так:

{"timestamp":"2020-04-11T10:10:58.1110467+02:00","level":"Information","message":"{\r\n  \"to_index\": \"test-index\",\r\n  \"message\": \"test-message\"\r\n}"}

Хотя я хотел бы, чтобы это был ТОЛЬКО объект, я отправил:

{\"to_index\": \"test-index\",\"message\": \"test-message\"}

1 Ответ

2 голосов
/ 16 апреля 2020

Настройка того, как данные отправляются (или обрабатываются), зависит от используемого вами приемника, так как это зависит от приемника, чтобы предоставить вам способ сделать это.

Например, некоторые приемники позволяют вам чтобы предоставить outputTemplate строку для определения свойств, другие позволяют вам предоставить класс, который реализует ITextFormatter, отвечающий за форматирование сообщений.

Кажется, вы используете Serilog.Sinks.Network что позволяет вам предоставить пользовательский ITextFormatter, так что вы можете реализовать свой собственный форматер на основе одного из стандартных (CompactJsonFormatter.cs и RenderedCompactJsonFormatter.cs) и решить, как сообщение должно быть отправлено.

...