【问题标题】:How to implement Serilog Custom Sink outputTemplate parameter如何实现 Serilog Custom Sink outputTemplate 参数
【发布时间】:2022-05-18 04:22:49
【问题描述】:

如何实现大多数接收器通用的 outputTemplate?

例如这有效:

Logger = new LoggerConfigruration()
   .WriteTo.Console(outputTemplate: "{Timestamp}{message}")
   .CreateLogger();

我想要

Logger = new LoggerConfigruration()
   .WriteTo.MySink(outputTemplate: "{Timestamp}{message}")
   .CreateLogger();

在哪里

public class MySink : ILogeventSink
{
    private readonly IFormatProvider formatProvider;
    private string outputTemplate;
    public void Emit(LogEvent logevent)
    {
         //something here to do with outputTemplate???
    }
    public MySink(IFormatProvider format, string template)
    {
         formatProvider = format;
         outputTemplate = template;
    }
}

【问题讨论】:

  • 曾经得到这个工作?
  • 我做了一个没有 outputTemplate 参数的自定义接收器。

标签: serilog


【解决方案1】:

您可以从Serilog.Formatting.Display 使用MessageTemplateTextFormatter

public class MySink : ILogEventSink
{
    private readonly MessageTemplateTextFormatter _formatter;

    public MySink(IFormatProvider formatProvider, string outputTemplate)
    {
         _formatter = new MessageTemplateTextFormatter(outputTemplate, formatProvider);
    }

    public void Emit(LogEvent logEvent)
    {
        using var writer = new StringWriter();
        _formatter.Format(logEvent, writer);
        var message = writer.ToString()
        Console.WriteLine(message);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多