Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to implement Serilog Custom Sink outputTemplate parameter

Tags:

serilog

How do I implement outputTemplate that is common to most sinks?

For example this works:

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

I want to

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

Where

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;
    }
}
like image 657
Daniel Portugal Avatar asked Nov 16 '25 19:11

Daniel Portugal


1 Answers

You can use MessageTemplateTextFormatter from Serilog.Formatting.Display.

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);
    }
}
like image 184
samuel coutu Avatar answered Nov 19 '25 10:11

samuel coutu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!