替换日志消息中的参数并在 Log4j 2 中添加可抛出

2022-09-01 02:22:53

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

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

答案 1

Log4j 2(和SLF4J 1.6+)中有一个未记录的功能。可以作为最后一个参数传递。然后它会得到特殊的待遇。请参阅 AbstractLogger#logMessage(String, Level, Marker, String, Object...)ReusableParameterizedMessage#initThrowable()。)。Throwable

无需打扰 。问题中的代码将按预期工作:ParametrizedMessage

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


答案 2

你有没有试过查看参数化消息

从文档

参数:

messagePattern - 消息“format”字符串。这将是一个包含“{}”占位符的字符串,其中应替换参数。

objectArgs - 替换的参数。

可投掷 - 可投掷

例如:

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