@Override
    @Audit(
        action = AuditableActions.LOGOUT,
        actionResolverName = AuditActionResolvers.LOGOUT_ACTION_RESOLVER,
        resourceResolverName = AuditResourceResolvers.LOGOUT_RESOURCE_RESOLVER)
    public List<SingleLogoutRequestContext> performLogout(final SingleLogoutExecutionRequest context) {
        val ticket = context.getTicketGrantingTicket();
        LOGGER.info("Performing logout operations for [{}]", ticket.getId());
        if (this.singleLogoutCallbacksDisabled) {
            LOGGER.info("Single logout callbacks are disabled");
            return new ArrayList<>();
        }
        val logoutRequests = performLogoutForTicket(context);
        logoutExecutionPlan.getLogoutPostProcessors().forEach(postProcessor -> {
            LOGGER.debug("Invoking logout handler [{}] to process ticket [{}]", postProcessor.getClass().getSimpleName(), ticket.getId());
            postProcessor.handle(ticket);
        });
        LOGGER.info("[{}] logout requests were processed", logoutRequests.size());
        return logoutRequests;
    }
This logout manager handles the Single Log Out process.

@author Jerome Leleu
@since 4.0.0
core/cas-server-core-logout-api/src/main/java/org/apereo/cas/logout/DefaultLogoutManager.java