AuthAuditLoggingConfiguration.java
package com.project.auth.config.logging;
import com.project.auth.application.support.audit.AuditLevel;
import com.project.auth.application.support.audit.AuthAuditEvent;
import com.project.auth.application.support.audit.AuthAuditEventPublisher;
import com.project.auth.application.support.audit.AuthAuditFields;
import com.project.auth.application.support.logging.LogSanitizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.spi.LoggingEventBuilder;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;
@Configuration
public class AuthAuditLoggingConfiguration {
private static final Logger audit = LoggerFactory.getLogger("audit.auth");
@Bean
public AuthAuditEventPublisher authAuditEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
return applicationEventPublisher::publishEvent;
}
@Bean
public AuthAuditEventLogListener authAuditEventListener() {
return new AuthAuditEventLogListener();
}
static final class AuthAuditEventLogListener {
@EventListener
public void onAuthAuditEvent(AuthAuditEvent event) {
LoggingEventBuilder builder = event.level() == AuditLevel.WARN ? audit.atWarn() : audit.atInfo();
builder.addKeyValue(AuthAuditFields.EVENT_TYPE, event.eventType());
event.fields().forEach((key, value) -> builder.addKeyValue(key, LogSanitizer.normalize(value)));
builder.log(event.eventType());
}
}
}