替换日志消息中的参数,并在Log4j 2中添加Throwable

ctehm74n  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(223)

我正在尝试记录一个异常,并希望在日志消息中包含另一个变量的值。是否有可以执行此操作的Logger API?

logger.error("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar(), exception);
yuvru6vn

yuvru6vn1#

在Log4j 2(和SLF4J 1.6+)中有一个未公开的特性。可以将Throwable作为最后一个参数传递。然后它会得到特殊处理。请参见AbstractLogger#logMessage(String, Level, Marker, String, Object...)ReusableParameterizedMessage#initThrowable()
不需要为ParametrizedMessage而烦恼。问题中的代码将按预期工作:
logger.error("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar(), exception);

htzpubme

htzpubme2#

你试过看ParameterizedMessage吗?
从文档中
参数:
messagePattern -消息“格式”字符串。这将是一个包含“{}”占位符的字符串,其中应替换参数。
objectArgs -用于替换的参数。
throwable -可投掷的
例如:

logger.error(new ParameterizedMessage("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar()), exception);

相关问题