public static void protocolMessage(final String title,
                                       final Map<String, Object> context,
                                       final Object message) {
        if (isProtocolMessageLoggerEnabled()) {
            val builder = new StringBuilder();
            builder.append('\n');
            builder.append(StringUtils.repeat('=', CHAR_REPEAT_ACCOUNT));
            builder.append(String.format("\n%s\n", title));
            builder.append(StringUtils.repeat('=', CHAR_REPEAT_ACCOUNT));
            builder.append('\n');
            context.forEach((key, value) -> {
                val toLog = DigestUtils.abbreviate(value.toString());
                if (StringUtils.isNotBlank(toLog)) {
                    builder.append(String.format("%s: %s\n", key, toLog));
                }
            });
            if (!context.isEmpty()) {
                builder.append(StringUtils.repeat('=', CHAR_REPEAT_ACCOUNT));
                builder.append('\n');
            }
            if (message != null && StringUtils.isNotBlank(message.toString())) {
                builder.append(String.format("%s\n", message));
                builder.append(StringUtils.repeat('=', CHAR_REPEAT_ACCOUNT));
            }
            val result = builder.toString();
            LoggerFactory.getLogger(LOGGER_NAME_PROTOCOL_MESSAGE).info(result);
        }
    }
Protocol message.

@param title   the title
@param context the context
@param message the message
core/cas-server-core-util-api/src/main/java/org/apereo/cas/util/LoggingUtils.java