我想在我的日志应用程序中使用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。 谢谢
答案 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));
方法将不被调用。
这更适用于toString
或DEBUG
级别的日志记录,但这是一个值得进入的习惯。
许多记录器还将提供参数替换机制,这可能是一种更好的方法,也可以实现此功能。
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);