You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by GitBox <gi...@apache.org> on 2022/04/04 12:17:21 UTC

[GitHub] [flink] metaswirl commented on a diff in pull request #19272: [FLINK-26710] fix TestLoggerResource

metaswirl commented on code in PR #19272:
URL: https://github.com/apache/flink/pull/19272#discussion_r841670907


##########
flink-test-utils-parent/flink-test-utils-junit/src/main/java/org/apache/flink/testutils/logging/TestLoggerResource.java:
##########
@@ -43,52 +52,125 @@
 
     private final String loggerName;
     private final org.slf4j.event.Level level;
+    @Nullable private LoggerConfig backupLoggerConfig = null;
 
     private ConcurrentLinkedQueue<String> loggingEvents;
 
     public TestLoggerResource(Class<?> clazz, org.slf4j.event.Level level) {
-        this.loggerName = clazz.getCanonicalName();
+        this(clazz.getCanonicalName(), level);
+    }
+
+    private TestLoggerResource(String loggerName, org.slf4j.event.Level level) {
+        this.loggerName = loggerName;
         this.level = level;
     }
 
     public List<String> getMessages() {
         return new ArrayList<>(loggingEvents);
     }
 
+    private static String generateRandomString() {
+        return UUID.randomUUID().toString().replace("-", "");
+    }
+
     @Override
     protected void before() throws Throwable {
         loggingEvents = new ConcurrentLinkedQueue<>();
 
+        final LoggerConfig previousLoggerConfig =
+                LOGGER_CONTEXT.getConfiguration().getLoggerConfig(loggerName);
+
+        final Level previousLevel = previousLoggerConfig.getLevel();
+        final Level userDefinedLevel = Level.getLevel(level.name());
+
+        // Set log level to last specific. This ensures that the parent still receives all log
+        // lines.
+        // WARN is more specific than INFO is more specific than DEBUG etc.
+        final Level newLevel =
+                userDefinedLevel.isMoreSpecificThan(previousLevel)
+                        ? previousLevel
+                        : userDefinedLevel;
+
+        // Filter log lines according to user requirements.
+        final Filter levelFilter =
+                ThresholdFilter.createFilter(
+                        userDefinedLevel, Filter.Result.ACCEPT, Filter.Result.DENY);
+
         Appender testAppender =
-                new AbstractAppender("test-appender", null, null, false) {
+                new AbstractAppender(
+                        "test-appender-" + generateRandomString(), levelFilter, null, false) {
                     @Override
                     public void append(LogEvent event) {
                         loggingEvents.add(event.getMessage().getFormattedMessage());
                     }
                 };
         testAppender.start();
 
-        AppenderRef appenderRef = AppenderRef.createAppenderRef(testAppender.getName(), null, null);
-        LoggerConfig logger =
+        LoggerConfig loggerConfig =
                 LoggerConfig.createLogger(
-                        false,
-                        Level.getLevel(level.name()),
-                        "test",
+                        true,

Review Comment:
   If you disable additivity, then the lines are not forwarded to the parent logger. The consequence is that the lines disappear for the user.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org