Log4J2千位分隔符



有人知道我是如何使用{}注释在大数字中包含千位的分隔符的吗?

log.info("Reading {} entries (multiplied with one million)", entries * 1_000_000);

输出(目前):

Reading 80000000 entries (multiplied with one million)

输出(期望):

Reading 80,000,000 entries (multiplied with one million)

有没有办法直接在Log4J2中实现这一点,而不使用额外的格式化程序,如DecimalFormat?

当您调用记录器方法之一时,Log4j2创建一个Message,它通常具有固定的字符串表示。

大多数方法创建ParameterizedMessages(参见可用消息),使用StringBuilder#append来格式化您的参数。这没有为整数提供任何替代表示。

如果你想要一个不同的格式,你可以:

  1. 使用Logger#printf来解释使用java.util.Formatter的格式字符串并创建StringFormattedMessage:

    log.printf(Level.INFO, "Reading %,d entries (multiplied with one million)",
    entries * 1_000_000);
    

    从方法签名中可以推断,它总是创建一个临时对象数组,并且不是没有垃圾的。

  2. 当您创建记录器时,您可以指定不同的MessageFactory。如果你使用StringFormatterMessageFactory,所有您的消息将被格式化为java.util.Formatter:

    final Logger log = LogManager.getLogger(MyClass.class,
    StringFormatterMessageFactory.INSTANCE);
    log.info("Reading %,d entries (multiplied with one million)", entries * 1_000_000);
    

    创建临时对象数组。

  3. 您也可以使用FormattedMessageFactory,它动态地确定您的格式字符串是否符合java.util.Formatter,java.text.MessageFormat或使用简单的{}占位符。当然,这种灵活性是以轻微的性能代价为代价的。

相关内容

  • 没有找到相关文章

最新更新