表示法比字符串格式表示法有效得多。(对此有基准,我稍后会添加一些数字。{}
%s %d
表示法接受任何 Object 或基元值,其中 String 格式要求参数的类型与格式匹配,否则将引发异常。所以一般来说,比较方便。{}
%s %d ...
{}
在某些情况下,您希望使用 String 格式语法,因为它可以让您对格式进行非常精细的控制。如果要“漂亮地打印”一个大数字作为,或者控制小数点后面的位数,那么是不够的。1,234,567.123
{}
Log4j2 允许您混合使用这两种用法。可以在任何地方使用 String 格式语法(通过使用 ),但也许更方便的是大多数时候使用默认格式,并且仅在需要对该方法进行细粒度控制时才使用 String 格式语法:LogManager.getFormattedLogger
{}
printf
logger.printf(Level.INFO, "Logging in user %1$s with birthday %2$tm %2$te,%2$tY", user.getName(), user.getBirthdayCalendar());
在内部,Log4j2格式努力避免创建字符串或其他临时对象。使用字符串格式语法无法做到这一点。{}