gpt4 book ai didi

java - 为什么 Log4j 接受日志消息占位符的未编号括号语法?

转载 作者:行者123 更新时间:2023-12-01 16:47:58 33 4
gpt4 key购买 nike

默认情况下,log4j2 允许您使用 Java 的 MessageFormat 语法来格式化消息。事实上,在框架提供的类中进行探索,我发现了一个 MessageFormatMessage 实现

log4j2 接受 log.info("用户 {} 在 {} 进入安全区域",用户名,url);

但是众所周知,如果您想使用占位符样式的语法写入控制台,您必须执行 System.out.println(MessageFormat.format("User {0 } 进入安全区域 {1}",用户名, url));。它不太酷,因为您必须始终记住将所有参数写入从 0 开始的

我对代码进行了更多深入研究,found this

protected String formatMessage(final String msgPattern, final Object... args) {
try {
final MessageFormat temp = new MessageFormat(msgPattern, locale);
return temp.format(args);
} catch (final IllegalFormatException ife) {
LOGGER.error("Unable to format msg: " + msgPattern, ife);
return msgPattern;
}
}

我不明白的是:既然 log4j 使用记录器给出的模式调用 Java Text 的 MessageFormat,并且因为我的理解 log4j 默认为 MessageFormatMessage,为什么我可以调用 log4j使用没有参数编号的模式,并且我无法使用 MessageFormat.format 进行相同的省略?

如果能够使用相同的 log4j 技巧来格式化我的代码中的常规 Java 消息

最佳答案

Log4j2 中的默认消息工厂是 ParameterizedMessageFactory .

这是使用参数标记 {} 接受格式字符串的类型。

您提出的方法是 MessageFormatMessage 类的一部分,该类又被另一个名为 MessageFormatMessageFactory 的消息工厂使用。 。当您决定使用此工厂时,Log4j2 将仅接受符合 java.text.MessageFormat 的格式字符串。

关于java - 为什么 Log4j 接受日志消息占位符的未编号括号语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46241879/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com