From 06a1add71b85fb12f1807f98c2c20aeec46dbfc5 Mon Sep 17 00:00:00 2001 From: John Blum Date: Fri, 14 Feb 2020 17:47:28 -0800 Subject: [PATCH] Add utility method to reset the initialized, dirty state of the SLF4J, Logback logging provider/system. Resolves gh-73. --- .../slf4j/logback/support/LogbackSupport.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/spring-geode-starter-logging/src/main/java/org/springframework/geode/logging/slf4j/logback/support/LogbackSupport.java b/spring-geode-starter-logging/src/main/java/org/springframework/geode/logging/slf4j/logback/support/LogbackSupport.java index a3c47ae2..5ec87349 100644 --- a/spring-geode-starter-logging/src/main/java/org/springframework/geode/logging/slf4j/logback/support/LogbackSupport.java +++ b/spring-geode-starter-logging/src/main/java/org/springframework/geode/logging/slf4j/logback/support/LogbackSupport.java @@ -15,6 +15,7 @@ */ package org.springframework.geode.logging.slf4j.logback.support; +import java.lang.reflect.Method; import java.util.Objects; import java.util.Optional; import java.util.function.Function; @@ -22,6 +23,7 @@ import java.util.function.Function; import org.slf4j.ILoggerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.impl.StaticLoggerBinder; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; @@ -67,6 +69,28 @@ public abstract class LogbackSupport { requireLoggerContext().putObject(SPRING_BOOT_LOGGING_SYSTEM_CLASS_NAME, new Object()); } + /** + * Resets the state of the SLF4J Logback logging provider (system). + */ + public static void resetLogback() { + + try { + + Method loggerFactoryReset = LoggerFactory.class.getDeclaredMethod("reset"); + + loggerFactoryReset.setAccessible(true); + loggerFactoryReset.invoke(null); + + Method staticLoggerBinderReset = StaticLoggerBinder.class.getDeclaredMethod("reset"); + + staticLoggerBinderReset.setAccessible(true); + staticLoggerBinderReset.invoke(null); + } + catch (Throwable cause) { + throw new IllegalStateException("Failed to reset Logback", cause); + } + } + /** * Resolves the SLF4J, Logback {@link LoggerContext}. *