@@ -46,15 +46,32 @@ public class PluginLogger {
4646 public static void updateLogLevel () {
4747 final Logger rootLoggerInstance = Logger .getInstance ("io.flutter" );
4848 try {
49- rootLoggerInstance .setLevel (FlutterSettings .getInstance ().isVerboseLogging () ? LogLevel .ALL : LogLevel .INFO );
49+ if (isSetLevelOverridden (rootLoggerInstance )) {
50+ rootLoggerInstance .setLevel (FlutterSettings .getInstance ().isVerboseLogging () ? LogLevel .ALL : LogLevel .INFO );
51+ }
5052 }
5153 catch (Throwable e ) {
52- // This can happen if the logger is wrapped by a 3rd party plugin that doesn't correctly implement setLevel.
53- // See https://github.com/flutter/flutter-intellij/issues/8631
54- Logger .getInstance (PluginLogger .class ).warn ("Failed to set log level" , e );
54+ // This helper method via reflection should prevent the call to setLevel if it's not overridden,
55+ // but we keep this catch block as a final safety net.
5556 }
5657 }
5758
59+ private static Boolean isSetLevelOverridden ;
60+
61+ private static boolean isSetLevelOverridden (Logger logger ) {
62+ if (isSetLevelOverridden != null ) {
63+ return isSetLevelOverridden ;
64+ }
65+ try {
66+ final java .lang .reflect .Method method = logger .getClass ().getMethod ("setLevel" , LogLevel .class );
67+ isSetLevelOverridden = !method .getDeclaringClass ().equals (Logger .class );
68+ }
69+ catch (NoSuchMethodException | SecurityException e ) {
70+ isSetLevelOverridden = false ;
71+ }
72+ return isSetLevelOverridden ;
73+ }
74+
5875 public static @ NotNull Logger createLogger (@ NotNull Class <?> logClass ) {
5976 return Logger .getInstance (logClass .getName ());
6077 }
0 commit comments