【问题标题】:Structured logging where logger argument not wanted in message消息中不需要记录器参数的结构化日志记录
【发布时间】:2021-01-16 09:57:46
【问题描述】:

我正在使用 logstash 在 Spring Boot 应用程序中使用结构化日志记录,有时我想在日志中包含我不想在日志消息中使用的键值。是否有 StructuredArgument 或类似的允许这样做?

我目前正在做的一个例子是这样的:

// import lombok.extern.slf4j.Slf4j;
// import static net.logstash.logback.argument.StructuredArguments.kv;
// import static net.logstash.logback.argument.StructuredArguments.v;

log.info(
  "My message with one arg {}", 
  v("key1":"arg I want to include value in place of placeholder in message and in json as key/value"), 
  kv("key2", "arg I only want in the json and not in the message"))

一切都如我所愿,我的意思是日志包含键值对,而消息仅包含第一个值来代替占位符。问题是我从编译器收到了一个警告,该警告由 intellij (PlaceholderCountMatchesArgumentCount) 标记,关于第二个结构化参数,我想避免这种情况而不诉诸于抑制/忽略它

【问题讨论】:

    标签: java spring-boot logstash slf4j spring-logback


    【解决方案1】:

    您可以将结构化参数打印 nothing 到格式化消息中:

    • (1) 在消息中包含第二个占位符{}
    • (2) 使用keyValue() 代替kv()
    • (3) 提供可选的messageFormatPattern 参数(JavaDoc) 等于""

    调整你的例子:

    log.info(
      "My message with one arg {}{}", //note (1)
      v("key1":"arg I want to include value in place of placeholder in message and in json as key/value"), 
      keyValue("key2", "arg I only want in the json and not in the message", "")) //note (2) + (3)
    

    这将有效地用空字符串替换第二个占位符。

    【讨论】:

      【解决方案2】:

      您可以将日志消息作为常量字符串,然后代码质量检查将不会发出警告

      【讨论】:

        【解决方案3】:

        您可以使用 Markers 并在您的日志消息之前传递它 - 更多详细信息请参见 github

        logger.info(append("key2", "only json"), 
                       "My message with one arg {}", 
                       v("key1":"arg in msg and json"));
        

        我个人不喜欢这样,因为标记有不同的用途,所以如果结构化参数对您有用,请忽略 IDE 中的警告。

        无论如何,所有这些 json/结构化实现都是 SLF4J 1.* 的变通方法,它并没有为此构建。 SLF4J 2.0.0-alpha1 几乎在一年前就发布了,但它仍处于 alpha 阶段,我还没有使用它。但它的 API 应该已经为当今分布式日志管理系统中至关重要的键值做好了准备。

        【讨论】:

          猜你喜欢
          • 2023-01-12
          • 1970-01-01
          • 2018-03-24
          • 2023-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-20
          相关资源
          最近更新 更多