Java日志框架-支持printf()

Java日志框架-支持printf(),java,logging,log4j,printf,Java,Logging,Log4j,Printf,在c语言中,printf()真的很容易使用,在JavaSystem.out.printf()中也很神奇,但在log4j中,似乎只能使用“名字:”+firstName+”,年龄:“+Age,这很不舒服 问题是: 阻碍log4j实现此功能的困难是什么 什么样的日志框架支持这样的特性,你能给出一个包含maven依赖项和Java代码的简短示例吗 您可以使用它,它提供了一种以这种方式格式化日志的方法 比如说, LOGGER.info("Roll number of Student {} is {}.",

在c语言中,
printf()
真的很容易使用,在Java
System.out.printf()
中也很神奇,但在
log4j
中,似乎只能使用
“名字:”+firstName+”,年龄:“+Age
,这很不舒服

问题是:

  • 阻碍
    log4j
    实现此功能的困难是什么
  • 什么样的日志框架支持这样的特性,你能给出一个包含maven依赖项和Java代码的简短示例吗
您可以使用它,它提供了一种以这种方式格式化
日志的方法

比如说,

LOGGER.info("Roll number of Student {} is {}.", studentName, rollNumber);
您可以使用字符串的方法,如:

logger.info(String.format("Student %s with roll number %d found!", studentName, rollNumber));

除了其他Log4j 2支持的参数化日志记录之外

printf(Level.INFOR,format,parm1)


FWIW、Log4j还支持使用符合java.text.MessageFormat和java.util.Formatter的字符串进行日志记录。

使用log4j2的LogManager.getFormatterLogger使其满意

见:


org.apache.logging.log4j.LogManager#getFormatterLogger

这不如使用slf4j,因为字符串必须在传递到info方法之前进行格式化(并且可能会根据日志配置进行过滤),因此它可能会做很多不必要的工作。是的,这是一个不错的选择,但我想知道,为什么log4j从来没有提供过这样的包装器方法,这是否如此简单…@NathanHughes,是的,确实如此。但在slf4j中,就字符串的格式方法而言,它更复杂,内存更密集。请注意,它需要数组作为参数。@SMA我刚刚检查了slf4j api 1.7.13,它提供了一个可变长度的参数列表,而不仅仅是一个数组。真的吗?我不确定。但是如果这是真的,即使在下面的c
printf()
中使用varargs,我认为也可以。很好,我刚刚做了一个测试,使用
slf4j api 1.7.13
,方法
info(字符串格式,对象…参数)
printf()
的信息记录级别类似,只有一个例外是它会自动添加新行,因此,
\n
不是必需的。请阅读并更新您的答案。