使logback模式部分可选?

26

有没有可能根据属性使logback的pattern布局的某些部分发生变化?例如,仅当%X {bdid}存在时才显示bdid (...)?

此appender

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>bdid\(%X{bdid}\) - %d{HH:mm:ss.SSS} %msg%n</pattern>
    </encoder>
</appender>

打印

如果bdid存在,打印bdid(0b5d3877-f3dd-4189-8b1b-489c8b617f2a) 18:22:25.206

如果不存在,打印bdid() 18:22:20.928

如何省略我的日志中的空bdid()?

1个回答

20

您可以使用 replace 函数,具体详情请参见此处的文档。以下是一个可行的示例:

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%replace(bdid\(%X{bdid}\)){'bdid\(\)', ''} - %d{HH:mm:ss.SSS} %msg%n</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>

</configuration>

测试函数

public class PatternTest
{
  @Test
  public void test()
  {
    Logger logger = LoggerFactory.getLogger(PatternTest.class);
    MDC.put("bdid", "hola");
    logger.info("Check enclosed.");
    MDC.remove("bdid");
    logger.info("Check enclosed.");
  }
}

测试输出

bdid(hola) - 18:40:40.233 Check enclosed.
 - 18:40:40.234 Check enclosed.

%replace(bdid(%X{bdid})){'bdid()', ''} 在 CompositeConverter<, children: ch.qos.logback.core.pattern.LiteralConverter@415b0b49> 中抛出错误 - 您至少需要声明两个选项,而您没有在Spring Boot中声明任何选项。 - carlos palma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接