[英]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();
});
问题:
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.