使logback模式部分可选吗?

时间:2015-10-12 16:27:01

标签: java logging slf4j logback mdc

是否可以根据属性制作部分回溯模式布局? 例如在%X {bdid}存在的情况下显示bdid(...)?

这个追加者

bdid() 18:22:20.928

打印

{{1}}如果bdid存在,则打印

{{1}}如果没有。

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

1 个答案:

答案 0 :(得分:6)

您可以使用替换功能,详情请参阅文档here。一个工作示例如下:

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.