77import static org .junit .jupiter .api .Assertions .assertThrows ;
88import static org .junit .jupiter .api .Assertions .assertTrue ;
99
10+ import ch .qos .logback .classic .Level ;
1011import ch .qos .logback .classic .spi .ILoggingEvent ;
1112import ch .qos .logback .core .read .ListAppender ;
1213import com .github .thought2code .mcp .annotated .McpApplicationContext ;
@@ -148,7 +149,7 @@ void streamableTransport_shouldServeAllFixtureComponents() {
148149 @ Test
149150 void toolInvocationFailure_shouldKeepClientContractAndEmitSourceMethodLog () {
150151 int port = new Random ().nextInt (8000 , 9000 );
151- ListAppender < ILoggingEvent > appender = attachInMemoryLogAppender ();
152+ GeneratedLogCapture capture = attachGeneratedInvocationLogAppender ();
152153 AnnotatedMcpServer server =
153154 TestMcpServerLifecycle .start (context , TestMcpConfigurations .streamable (port ));
154155 try {
@@ -170,12 +171,12 @@ void toolInvocationFailure_shouldKeepClientContractAndEmitSourceMethodLog() {
170171 }
171172
172173 assertTrue (
173- hasInvocationFailureLog (appender .list ),
174+ hasInvocationFailureLog (capture . appender () .list ),
174175 "Expected invocation failure log with sourceMethod and exception detail" );
175176 } finally {
176177 assert server != null ;
177178 server .stop ();
178- detachInMemoryLogAppender ( appender );
179+ detachGeneratedInvocationLogAppender ( capture );
179180 }
180181 }
181182
@@ -241,20 +242,25 @@ private static boolean hasCause(Throwable error, Predicate<Throwable> matcher) {
241242 return false ;
242243 }
243244
244- private static ListAppender <ILoggingEvent > attachInMemoryLogAppender () {
245- ch .qos .logback .classic .Logger rootLogger =
246- (ch .qos .logback .classic .Logger ) LoggerFactory .getLogger (org .slf4j .Logger .ROOT_LOGGER_NAME );
245+ private static GeneratedLogCapture attachGeneratedInvocationLogAppender () {
246+ ch .qos .logback .classic .Logger generatedLogger =
247+ (ch .qos .logback .classic .Logger )
248+ LoggerFactory .getLogger ("com.github.thought2code.mcp.annotated.generated" );
249+ Level previousLevel = generatedLogger .getLevel ();
250+ boolean previousAdditivity = generatedLogger .isAdditive ();
247251 ListAppender <ILoggingEvent > appender = new ListAppender <>();
248252 appender .start ();
249- rootLogger .addAppender (appender );
250- return appender ;
253+ generatedLogger .setLevel (Level .ERROR );
254+ generatedLogger .setAdditive (false );
255+ generatedLogger .addAppender (appender );
256+ return new GeneratedLogCapture (generatedLogger , appender , previousLevel , previousAdditivity );
251257 }
252258
253- private static void detachInMemoryLogAppender ( ListAppender < ILoggingEvent > appender ) {
254- ch . qos . logback . classic . Logger rootLogger =
255- ( ch . qos . logback . classic . Logger ) LoggerFactory . getLogger ( org . slf4j . Logger . ROOT_LOGGER_NAME );
256- rootLogger . detachAppender ( appender );
257- appender .stop ();
259+ private static void detachGeneratedInvocationLogAppender ( GeneratedLogCapture capture ) {
260+ capture . logger (). detachAppender ( capture . appender ());
261+ capture . logger (). setLevel ( capture . previousLevel () );
262+ capture . logger (). setAdditive ( capture . previousAdditivity () );
263+ capture . appender () .stop ();
258264 }
259265
260266 private static boolean hasInvocationFailureLog (List <ILoggingEvent > events ) {
@@ -272,4 +278,10 @@ private static boolean hasInvocationFailureLog(List<ILoggingEvent> events) {
272278 }
273279 return false ;
274280 }
281+
282+ private record GeneratedLogCapture (
283+ ch .qos .logback .classic .Logger logger ,
284+ ListAppender <ILoggingEvent > appender ,
285+ Level previousLevel ,
286+ boolean previousAdditivity ) {}
275287}
0 commit comments