【问题标题】:Serilog custom outputTemplateSerilog 自定义输出模板
【发布时间】:2020-04-07 21:33:46
【问题描述】:

我正在寻找用于日志记录的自定义输出模板格式

示例输出模板:"{\"time\":\"+ \",\"severity\":\"{Level:u}\",\"machine\":\"{MachineName}\" , \"x-Correlation-ID\":\"{CorrelationID}\"}"

它总是期望第一个字段值为“+”值,如果该字段不存在意味着它不会替换下一个属性值({Level:u})。

以上模板输出:{"time":"+ ","severity":"INFORMATION","machine":"xxxxxx", "x-Correlation-ID":"e5b9c851-de56-42d9-b414-9d7108d2ebcf"}

如果第一个字段值不是“+”值,输出如下: {"time":"test","severity":"{Level:u}","machine":"xxxxxx", "x-相关 ID":"f6133a7e-ea4f-4bde-8200-798d5346d3ce"}

RollingFileAlternate sink 用于记录 WriteTo.Async(w => w.RollingFileAlternate(logFilePath.ToString(), outputTemplate: logOutputTemplate, fileSizeLimitBytes: rollingFilesSize, reservedFileCountLimit: null))

如何在不影响其他输出模板属性的情况下删除第一个属性。

【问题讨论】:

    标签: c# logging serilog


    【解决方案1】:

    您可能必须实现一个自定义 ITextFormatter 来实现您需要的逻辑,以便创建您想要的相应输出。

    您可以查看默认代码(CompactJsonFormatter.csRenderedCompactJsonFormatter.cs)是如何实现的,并根据您的需要调整代码。

    public class YourCustomJsonFormatter : ITextFormatter
    {
        public void Format(LogEvent logEvent, TextWriter output)
        {
            // ...
        }
    }
    

    Log.Logger = new LoggerConfiguration()
        .WriteTo.Console(new YourCustomJsonFormatter())
        .CreateLogger();
    

    【讨论】:

    • 嗨@Caio,感谢您的评论,自定义 ITextFormatter 不支持 serilog 输出模板。
    • @Srini 我不确定我是否理解您的上述评论。您使用的哪个接收器不支持ITextFormatter
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2018-12-15
    • 2018-07-13
    相关资源
    最近更新 更多