我正在尝试记录一个异常,并希望在日志消息中包含另一个变量的值。是否有可以执行此操作的Logger API?
logger.error("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar(), exception);
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);
Throwable
AbstractLogger#logMessage(String, Level, Marker, String, Object...)
ReusableParameterizedMessage#initThrowable()
ParametrizedMessage
htzpubme2#
你试过看ParameterizedMessage吗?从文档中参数:messagePattern -消息“格式”字符串。这将是一个包含“{}”占位符的字符串,其中应替换参数。objectArgs -用于替换的参数。throwable -可投掷的例如:
logger.error(new ParameterizedMessage("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar()), exception);
2条答案
按热度按时间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);
htzpubme2#
你试过看ParameterizedMessage吗?
从文档中
参数:
messagePattern -消息“格式”字符串。这将是一个包含“{}”占位符的字符串,其中应替换参数。
objectArgs -用于替换的参数。
throwable -可投掷的
例如: