Browse Source

MockLogAppender takes string logger names for capturing (#104971)

For classes that are not publically accessible, we can use the cannoical
names for capturing.
Yang Wang 1 year ago
parent
commit
1fd2756f8c

+ 1 - 1
modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3RetryingInputStream.java

@@ -252,7 +252,7 @@ class S3RetryingInputStream extends InputStream {
                 action,
                 blobStore.bucket(),
                 blobKey,
-                purpose,
+                purpose.getKey(),
                 attempt - initialAttempt
             );
         }

+ 8 - 1
test/framework/src/main/java/org/elasticsearch/test/MockLogAppender.java

@@ -241,8 +241,15 @@ public class MockLogAppender extends AbstractAppender {
     }
 
     public Releasable capturing(Class<?>... classes) {
+        return appendToLoggers(Arrays.stream(classes).map(LogManager::getLogger).toList());
+    }
+
+    public Releasable capturing(String... names) {
+        return appendToLoggers(Arrays.stream(names).map(LogManager::getLogger).toList());
+    }
+
+    private Releasable appendToLoggers(List<Logger> loggers) {
         start();
-        final var loggers = Arrays.stream(classes).map(LogManager::getLogger).toArray(Logger[]::new);
         for (final var logger : loggers) {
             Loggers.addAppender(logger, this);
         }