@Bean
        @ConditionalOnMissingBean(name = "casAuditTrailExecutionPlanConfigurer")
        @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
        public AuditTrailExecutionPlanConfigurer casAuditTrailExecutionPlanConfigurer(
            final ConfigurableApplicationContext applicationContext,
            final CasConfigurationProperties casProperties) {
            return BeanSupplier.of(AuditTrailExecutionPlanConfigurer.class)
                .when(BeanCondition.on("cas.audit.slf4j.enabled").isTrue().evenIfMissing().given(applicationContext.getEnvironment()))
                .supply(() -> plan -> {
                    val slf4j = casProperties.getAudit().getSlf4j();
                    val manager = new Slf4jLoggingAuditTrailManager();
                    manager.setUseSingleLine(slf4j.isUseSingleLine());
                    manager.setEntrySeparator(slf4j.getSinglelineSeparator());
                    if (!slf4j.getAuditableFields().isEmpty()) {
                        val fields = StringUtils.commaDelimitedListToSet(slf4j.getAuditableFields())
                            .stream()
                            .map(field -> AuditTrailManager.AuditableFields.valueOf(field.toUpperCase(Locale.ENGLISH)))
                            .toList();
                        manager.setAuditableFields(fields);
                    }
                    plan.registerAuditTrailManager(manager);
                })
                .otherwiseProxy()
                .get();
        }
This is {@link CasCoreAuditAutoConfiguration}.

@author Misagh Moayyed
@since 5.0.0
core/cas-server-core-audit/src/main/java/org/apereo/cas/config/CasCoreAuditAutoConfiguration.java