apereo/cas · info
logger.warn(LOG_MESSAGE_SUMMARIZER.summarizeStackTrace(messa…
Error message
logger.warn(LOG_MESSAGE_SUMMARIZER.summarizeStackTrace(message, throwable))
What it means
This is the summarized branch of LoggingUtils.warn(Logger, String, Throwable): when LOG_MESSAGE_SUMMARIZER.shouldSummarize(logger) is true, the throwable's stack trace is replaced by a condensed summary via summarizeStackTrace(message, throwable) and logged at WARN. Full frames are intentionally omitted to control log volume.
Solutions
- Temporarily disable stack-trace summarization for this logger to see full traces
- Check the summarized trace's root frames — they usually name the failing class/method directly
- If summarization config is global, scope it per-logger so critical categories keep full traces
Example fix
// before (summarizer on)
logger.warn(LoggingSummarizer.summarizeStackTrace(msg, t));
// after (full trace when debugging)
logging:
cas:
warnings:
stacktrace-summarization: false Defensive patterns
Strategy: fallback
Prevention
- Keep summarizer configuration documented so debugging sessions aren't confused by missing frames
- Use per-logger summarization scope so critical categories retain full traces
- When debugging, temporarily disable summarization instead of guessing from the summary
When it happens
Trigger: Calling LoggingUtils.warn(logger, message, throwable) with summarization enabled for that logger; the emitted log contains the summarized trace instead of the full one.
Common situations: Developers surprised that a WARN log lacks the full stack trace and cannot debug the root cause; environments where summarization was enabled to tame noisy logs.
Related errors
- logger.warn(message, throwable) (or summarized stack trace)
- logger.warn(message, throwable)
- warn(logger, getMessage(throwable), throwable)
- out.warn(ASCII_ART_LOGGER_MARKER, message)
- warn(logger, getMessage(throwable), throwable)
AI-assisted analysis of apereo/cas@e7288fc434 (2026-09-08).
Data as JSON: /api/errors/afbbf87fd688e64f.
Report an issue: GitHub.
Appendix: source
Thrown at core/cas-server-core-util-api/src/main/java/org/apereo/cas/util/LoggingUtils.java:153
* Log warning.
*
* @param logger the logger
* @param throwable the throwable
*/
public static void warn(final Logger logger, final Throwable throwable) {
warn(logger, getMessage(throwable), throwable);
}
/**
* Log warning.
*
* @param logger the logger
* @param message the message
* @param throwable the throwable
*/
public static void warn(final Logger logger, final String message, final Throwable throwable) {
FunctionUtils.doIf(LOG_MESSAGE_SUMMARIZER.shouldSummarize(logger),
_ -> logger.warn(LOG_MESSAGE_SUMMARIZER.summarizeStackTrace(message, throwable)),
_ -> logger.warn(message, throwable))
.accept(throwable);
}
/**
* Get first non-null exception message, and return class name if all messages null.
*
* @param throwable Top level throwable
* @return String containing first non-null exception message, or Throwable simple class name
*/
public static String getMessage(final Throwable throwable) {
if (StringUtils.isEmpty(throwable.getMessage())) {
val message = ExceptionUtils.getThrowableList(throwable)
.stream().map(Throwable::getMessage).filter(Objects::nonNull).findFirst();
if (message.isPresent()) {
return message.get();
}
}View on GitHub (pinned to e7288fc434)