【问题标题】:Serilog format only the properties as jsonSerilog 仅将属性格式化为 json
【发布时间】:2019-12-01 18:04:00
【问题描述】:

如果我有这个:

logger.Information("this is a message with {property_name}", complexObject);

我怎样才能使它等同于这个:

logger.Information("this is a message with {property_name}", JsonConvert.SerializeObject(complexObject));

【问题讨论】:

    标签: c# serilog


    【解决方案1】:

    如果属性名称以@ 开头,则整个对象图都存储在事件日志中。

    logger.Information("this is a message with {@property_name}", complexObject);
    

    如果您的接收器将日志事件记录为 JSON,则无需额外工作,或者可以对其进行配置。要发出 JSON,请读取 Formatting JSON

    【讨论】:

      【解决方案2】:

      根据Mohsen's answer,在 Serilog 术语中称为 Destructuring:获取复杂的 .NET 对象并将其转换为结构的过程,稍后可以表示为: JSON 对象或 XML blob。

      Preserving Object Structure

      在很多地方,如果有能力,将日志事件属性序列化为结构化对象是有意义的。 DTO(数据传输对象)、消息、事件和模型通常最好通过将它们分解为具有值的属性来记录。

      对于这个任务,Serilog 提供了@解构操作符。

      var sensorInput = new { Latitude = 25, Longitude = 134 };
      Log.Information("Processing {@SensorInput}", sensorInput);
      

      ('Destructuring' 是从各种编程语言中借用的术语;它是一种模式匹配样式,用于从结构化数据中提取值。Serilog 的用法目前仅在概念上相关,但未来可能对此进行扩展运算符可以更准确地匹配更广泛的定义。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 2013-06-12
        相关资源
        最近更新 更多