何时以及为什么最好在打印日志中使用字符串格式?

时间:2018-02-02 17:08:11

标签: java printing log4j string-formatting

我想在我的日志应用程序中使用log4j打印一些值(String,date,ecc)。 例如:

Sting idUser="Test123";
String name="Jack";
int age=22;

applicationlog.info("The selected user has this value :\n");
applicationlog.info("name :"+name+ "id: "+idUser+" age :"+age);

但是我播种了在某些应用程序中写道:

applicationlog.info(String.format("name :%s id :%s age :%d",name,idUser,age));

所以我的问题是: 何时以及为什么最好只在打印日志中使用String格式而不是“+”?我知道带串联的字符串最好使用“+”,但我不是这样的情况,事实上这里只有print。 谢谢

2 个答案:

答案 0 :(得分:3)

性能存在差异。

applicationlog.info("name :"+name+ "id: "+idUser+" age :"+age);

在您的特定情况下,您不会注意到,因为您正在使用String但是如果您要记录的对象更复杂但包含toString方法,那么在这种情况下{{1}无论日志级别如何,都会调用始终方法。

toString

在这种情况下,如果关闭日志记录,那么对象的applicationlog.info(String.format("name :%s id :%s age :%d",name,idUser,age)); 方法将被调用。

这更适用于toStringDEBUG级别的日志记录,但这是一个值得进入的习惯。

许多记录器还将提供参数替换机制,这可能是一种更好的方法,也可以实现此功能。

TRACE

答案 1 :(得分:1)

log4j v2内置支持Substituting Parameters

applicationlog.info("name: {} id: {} age: {}", name, idUser, age);

以及支持... printf style

printf
applicationlog.printf("name: %s id: %s age: %d", name, idUser, age);