【问题标题】:Serilog Custom Sink Formatting Issue with Serilog LogEventPropertyValueSerilog LogEventPropertyValue 的 Serilog 自定义接收器格式问题
【发布时间】:2020-12-23 15:05:37
【问题描述】:

我不得不创建自己的自定义接收器,因为目前可用的接收器都不能满足我的需求。

我遇到的问题是在 Emit 方法中从 logEvent 消息中获取键/值对值时,该值用引号和反斜杠包裹。

我尝试将字典中的输出值转换为字符串,然后删除不需要的属性,但对我没有任何作用。

自定义接收器类中的方法:

    public void Emit(LogEvent logEvent)
    {
        var properties = logEvent.Properties;

        Serilog.Events.LogEventPropertyValue value;
        if (properties.TryGetValue("logEventCategory", out value))
        {
            // Regex.Replace((value.ToString() ?? "").Replace("'", @"\'").Trim(), @"[\r\n]+", " "); // Not working
            var notWorking = value.ToString();
            var formattedValueNotWorking = value.ToString().Replace("\r\n", "\\r\\n");
        }
    }

似乎忽略了键/值对值的任何格式化尝试:您看到示例字符串值 System 用 \"System\" 包装 我想要的只是实际的字符串,而不是环绕在字符串周围的反斜杠或引号。

创建我自己的接收器是一项艰巨的任务,我只是想让事情变得简单,我花了两天时间试图理解消息格式中的更广泛的画面,但是使用自定义接收器它变得过于复杂和臃肿的编码无法满足我的需要。所有其他标准消息结构属性都呈现正常,例如消息/级别/时间戳等,它只是微调我需要的属性值的呈现,以便将这些值保存到我的数据库中自己的列中。

【问题讨论】:

    标签: dictionary logging serilog .net-5


    【解决方案1】:

    您需要从封闭的ScalarValue 中解开字符串:

        // using Serilog.Events;
    
        public void Emit(LogEvent logEvent)
        {
            var properties = logEvent.Properties;
    
            Serilog.Events.LogEventPropertyValue value;
            if (properties.TryGetValue("logEventCategory", out value) &&
                value is ScalarValue sv &&
                sv.Value is string rawValue)
            {
                // `rawValue` is what you're looking for
    

    【讨论】:

    • 您好,我在下面发布的解决方案已经满足了我现在所需要的,您是否预见到替换为您自己的解决方案的任何技术优势,或者它是否可以被视为可行的替代方案?非常感谢
    【解决方案2】:

    看起来我只需要使用正确的字符串替换语法:

        public void Emit(LogEvent logEvent)
        {
            var properties = logEvent.Properties;
    
            Serilog.Events.LogEventPropertyValue value;
            if (properties.TryGetValue("logEventCategory", out value))
            {
                var formattedValueWorking = value.ToString().Replace("\"", "");
                var test = formattedValueWorking;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 2023-04-06
      • 2021-08-12
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多