什么时候以及为什么在打印日志时使用字符串格式更好?
When and why is better to use string format in printing log?
我想使用 log4j 在我的日志应用程序中打印一些值(字符串、日期、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));
所以我的问题是:
什么时候以及为什么只在打印日志中使用字符串格式而不是“+”更好?我知道使用“+”连接字符串更好,但我不认为是这种情况,事实上这里只有打印。
谢谢
log4j v2 内置了对 Substituting Parameters
的支持
applicationlog.info("name: {} id: {} age: {}", name, idUser, age);
以及 printf
支持... printf 样式
applicationlog.printf("name: %s id: %s age: %d", name, idUser, age);
性能有差异。
applicationlog.info("name :"+name+ "id: "+idUser+" age :"+age);
在您的特定情况下,您不会注意到,因为您使用的是 String
s,但如果您要记录的对象更复杂但包含 toString
方法,那么在这种情况下 toString
方法将 总是 被调用,无论日志级别如何。
applicationlog.info(String.format("name :%s id :%s age :%d",name,idUser,age));
在这种情况下,例如,如果关闭日志记录,则对象的 toString
方法将不会 被调用。
这更适用于 DEBUG
或 TRACE
级别的日志记录,但这是一个值得养成的习惯。
许多记录器还将提供参数替换机制,这可能是实现此功能的更好方法。
applicationlog.info("name: {} id: {} age: {}", name, idUser, age);
我想使用 log4j 在我的日志应用程序中打印一些值(字符串、日期、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));
所以我的问题是: 什么时候以及为什么只在打印日志中使用字符串格式而不是“+”更好?我知道使用“+”连接字符串更好,但我不认为是这种情况,事实上这里只有打印。 谢谢
log4j v2 内置了对 Substituting Parameters
的支持applicationlog.info("name: {} id: {} age: {}", name, idUser, age);
以及 printf
支持... printf 样式
applicationlog.printf("name: %s id: %s age: %d", name, idUser, age);
性能有差异。
applicationlog.info("name :"+name+ "id: "+idUser+" age :"+age);
在您的特定情况下,您不会注意到,因为您使用的是 String
s,但如果您要记录的对象更复杂但包含 toString
方法,那么在这种情况下 toString
方法将 总是 被调用,无论日志级别如何。
applicationlog.info(String.format("name :%s id :%s age :%d",name,idUser,age));
在这种情况下,例如,如果关闭日志记录,则对象的 toString
方法将不会 被调用。
这更适用于 DEBUG
或 TRACE
级别的日志记录,但这是一个值得养成的习惯。
许多记录器还将提供参数替换机制,这可能是实现此功能的更好方法。
applicationlog.info("name: {} id: {} age: {}", name, idUser, age);