private void logFailedDelivery()

in core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java [1369:1499]


        private void logFailedDelivery(
                boolean shouldRedeliver, boolean newException, boolean handled, boolean continued, boolean isDeadLetterChannel,
                Exchange exchange, String message, Throwable e) {
            if (logger == null) {
                return;
            }

            if (!exchange.isRollbackOnly() && !exchange.isRollbackOnlyLast()) {
                if (newException && !currentRedeliveryPolicy.isLogNewException()) {
                    // do not log new exception
                    return;
                }

                // if we should not rollback, then check whether logging is enabled

                if (!newException && handled && !currentRedeliveryPolicy.isLogHandled()) {
                    // do not log handled
                    return;
                }

                if (!newException && continued && !currentRedeliveryPolicy.isLogContinued()) {
                    // do not log handled
                    return;
                }

                if (!newException && shouldRedeliver && !currentRedeliveryPolicy.isLogRetryAttempted()) {
                    // do not log retry attempts
                    return;
                }

                if (!newException && shouldRedeliver) {
                    if (currentRedeliveryPolicy.isLogRetryAttempted()) {
                        if (currentRedeliveryPolicy.getRetryAttemptedLogInterval() > 1
                                && redeliveryCounter % currentRedeliveryPolicy.getRetryAttemptedLogInterval() != 0) {
                            // do not log retry attempt because it is excluded by the retryAttemptedLogInterval
                            return;
                        }
                    } else {
                        // do not log retry attempts
                        return;
                    }
                }

                if (!newException && !shouldRedeliver && !currentRedeliveryPolicy.isLogExhausted()) {
                    // do not log exhausted
                    return;
                }
            }

            LoggingLevel newLogLevel;
            boolean logStackTrace;
            if (exchange.isRollbackOnly() || exchange.isRollbackOnlyLast()) {
                newLogLevel = currentRedeliveryPolicy.getRetriesExhaustedLogLevel();
                logStackTrace = currentRedeliveryPolicy.isLogStackTrace();
            } else if (shouldRedeliver) {
                newLogLevel = currentRedeliveryPolicy.getRetryAttemptedLogLevel();
                logStackTrace = currentRedeliveryPolicy.isLogRetryStackTrace();
            } else {
                newLogLevel = currentRedeliveryPolicy.getRetriesExhaustedLogLevel();
                logStackTrace = currentRedeliveryPolicy.isLogStackTrace();
            }
            if (e == null) {
                e = exchange.getProperty(ExchangePropertyKey.EXCEPTION_CAUGHT, Exception.class);
            }

            if (newException) {
                // log at most WARN level
                if (newLogLevel == LoggingLevel.ERROR) {
                    newLogLevel = LoggingLevel.WARN;
                }
                String msg = message;
                if (msg == null) {
                    msg = "New exception " + ExchangeHelper.logIds(exchange);
                    // special for logging the new exception
                    if (e != null) {
                        msg = msg + " due: " + e.getMessage();
                    }
                }

                if (e != null && logStackTrace) {
                    logger.log(msg, e, newLogLevel);
                } else {
                    logger.log(msg, newLogLevel);
                }
            } else if (exchange.isRollbackOnly() || exchange.isRollbackOnlyLast()) {
                String msg = "Rollback " + ExchangeHelper.logIds(exchange);
                Throwable cause = exchange.getException() != null
                        ? exchange.getException() : exchange.getProperty(ExchangePropertyKey.EXCEPTION_CAUGHT, Throwable.class);
                if (cause != null) {
                    msg = msg + " due: " + cause.getMessage();
                }

                // should we include message history
                if (!shouldRedeliver && currentRedeliveryPolicy.isLogExhaustedMessageHistory()) {
                    // only use the exchange formatter if we should log exhausted message body (and if using a custom formatter then always use it)
                    ExchangeFormatter formatter = customExchangeFormatter
                            ? exchangeFormatter
                            : (currentRedeliveryPolicy.isLogExhaustedMessageBody() || camelContext.isLogExhaustedMessageBody()
                                    ? exchangeFormatter : null);
                    String routeStackTrace = MessageHelper.dumpMessageHistoryStacktrace(exchange, formatter, false);
                    msg = msg + "\n" + routeStackTrace;
                }

                if (newLogLevel == LoggingLevel.ERROR) {
                    // log intended rollback on maximum WARN level (not ERROR)
                    logger.log(msg, LoggingLevel.WARN);
                } else {
                    // otherwise use the desired logging level
                    logger.log(msg, newLogLevel);
                }
            } else {
                String msg = message;
                // should we include message history
                if (!shouldRedeliver && currentRedeliveryPolicy.isLogExhaustedMessageHistory()) {
                    // only use the exchange formatter if we should log exhausted message body (and if using a custom formatter then always use it)
                    ExchangeFormatter formatter = customExchangeFormatter
                            ? exchangeFormatter
                            : (currentRedeliveryPolicy.isLogExhaustedMessageBody() || camelContext.isLogExhaustedMessageBody()
                                    ? exchangeFormatter : null);
                    String routeStackTrace
                            = MessageHelper.dumpMessageHistoryStacktrace(exchange, formatter, e != null && logStackTrace);
                    msg = msg + "\n" + routeStackTrace;
                }

                if (e != null && logStackTrace) {
                    logger.log(msg, e, newLogLevel);
                } else {
                    logger.log(msg, newLogLevel);
                }
            }
        }