繁体   English   中英

log4j2:模式参数的自定义格式

[英]log4j2: custom formating for pattern parameter

通常日志记录如下所示:

Duration duration = ...;
log.info("Duration: {}", duration);

但是,如果您需要自定义格式怎么办?

if (log.isInfoEnabled()) {
    String value = duration.toSeconds() + "." + duration.toMillis();
    log.info("Duration: {}", value);
}

在这种情况下,代码很复杂。 我正在寻找一种方法来进行第一个示例中的简单日志记录,但能够使用某种机制自定义值格式,例如,为给定类型定义格式 function:

LogSystem.install(Duration.class, duration -> {
    return String.format("%d.%d", duration.toSeconds(), duration.toMillis();
});

问题:

  • log4j 2.x 有这样或类似的功能吗?
  • 它可能存在于其他日志库中吗?
  • 如果不是,可以if (log.isInfoEnabled()) {... }以某种方式简化吗?

log4j 2.x 有这样或类似的功能吗?

是的,您可以使用

log.info("Duration: {}.{}", duration.toSeconds(), duration.toMillis());

您可以传递任意数量的参数。 如果使用参数化日志记录,则不需要检查 log.isInfoEnabled()。

它可能存在于其他日志库中吗?

SLF4j 还支持参数化日志记录。

是的,您可以使用属性文件来执行此操作。在 log4j2.properties 文件中设置策略模式,例如:

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ABClog/ABCapplication.log
appender.rolling.filePattern = ABClog/ABCapplication.%d{dd-MMM}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = { [%-5level %d{dd-MM-yyyy hh:mm:ss.SSS } ] [%msg] }%n

在 log4j2.proerties 文件中设置上述配置后,您将获得所需的 output,即使使用属性文件概念,您也可以添加额外信息,例如 Correlation-ID

log.info("hello") 

更多模式样式的 Log4j2 文档: https://logging.apache.org/log4j/2.x/manual/layouts.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM