package io.kokuwa.micronaut.logging; import java.util.Objects; import java.util.Optional; import java.util.function.Supplier; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.turbo.TurboFilter; import io.micronaut.context.annotation.BootstrapContextCompatible; import io.micronaut.context.annotation.Requires; import io.micronaut.core.annotation.Internal; import jakarta.inject.Singleton; /** * Utility class for Logback operations. * * @author Stephan Schnabel */ @Requires(classes = LoggerContext.class) @BootstrapContextCompatible @Singleton @Internal public class LogbackUtil { private final LoggerContext context; public LogbackUtil() { this.context = (LoggerContext) LoggerFactory.getILoggerFactory(); } public Optional getTurboFilter(Class type, String name) { return context.getTurboFilterList().stream() .filter(filter -> Objects.equals(name, filter.getName())) .filter(type::isInstance) .map(type::cast).findAny(); } public T getTurboFilter(Class type, String name, Supplier defaultFilter) { return getTurboFilter(type, name).orElseGet(() -> { var filter = defaultFilter.get(); filter.setName(name); filter.setContext(context); context.addTurboFilter(filter); return filter; }); } }