From 3c976bdabc816d3f5974d16c68aedff34f5429ac Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Thu, 11 Sep 2025 18:35:43 -0700 Subject: [PATCH 1/4] Change some run files to PluginLogger --- src/io/flutter/run/FlutterDebugProcess.java | 5 +++-- src/io/flutter/run/FlutterPositionMapper.java | 9 ++++---- src/io/flutter/run/FlutterReloadManager.java | 21 +++++++++++++++---- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/io/flutter/run/FlutterDebugProcess.java b/src/io/flutter/run/FlutterDebugProcess.java index 8a6b72a224..574eab06f7 100644 --- a/src/io/flutter/run/FlutterDebugProcess.java +++ b/src/io/flutter/run/FlutterDebugProcess.java @@ -23,6 +23,7 @@ import io.flutter.actions.ReloadFlutterApp; import io.flutter.actions.RestartAllFlutterApps; import io.flutter.actions.RestartFlutterApp; +import io.flutter.logging.PluginLogger; import io.flutter.run.common.RunMode; import io.flutter.run.daemon.FlutterApp; import io.flutter.view.FlutterViewMessages; @@ -42,7 +43,7 @@ * when not debugging in order to support hot reload.) */ public class FlutterDebugProcess extends DartVmServiceDebugProcess { - private static final @NotNull Logger LOG = Logger.getInstance(FlutterDebugProcess.class); + private static final @NotNull Logger LOG = PluginLogger.createLogger(FlutterDebugProcess.class); private final @NotNull FlutterApp app; @@ -141,7 +142,7 @@ private static void suppressDebugViews(@Nullable RunnerLayoutUi ui) { } } catch (ProcessCanceledException e) { - FlutterUtils.warn(LOG, "Failed to suppress debug views", e, true); + FlutterUtils.warn(LOG, "ProcessCanceledException in suppressDebugViews", e, true); throw e; } } diff --git a/src/io/flutter/run/FlutterPositionMapper.java b/src/io/flutter/run/FlutterPositionMapper.java index 5e90102e59..35193bef23 100644 --- a/src/io/flutter/run/FlutterPositionMapper.java +++ b/src/io/flutter/run/FlutterPositionMapper.java @@ -22,6 +22,7 @@ import com.jetbrains.lang.dart.util.DartUrlResolver; import io.flutter.FlutterUtils; import io.flutter.dart.DartPlugin; +import io.flutter.logging.PluginLogger; import io.flutter.utils.OpenApiUtils; import io.flutter.vmService.DartVmServiceDebugProcess; import org.dartlang.vm.service.element.LibraryRef; @@ -40,7 +41,7 @@ * Used when setting breakpoints, stepping through code, and so on while debugging. */ public class FlutterPositionMapper implements DartVmServiceDebugProcess.PositionMapper { - private static final @NotNull Logger LOG = Logger.getInstance(FlutterPositionMapper.class); + private static final @NotNull Logger LOG = PluginLogger.createLogger(FlutterPositionMapper.class); /** * This Project can't be non-null as we set it to null {@link #shutdown()} so the Project isn't held onto. @@ -257,7 +258,7 @@ private XSourcePosition getSourcePosition(@NotNull final String isolateId, @NotN private XSourcePosition getSourcePosition(@NotNull final String isolateId, @NotNull final String scriptId, @NotNull final String scriptUri, int tokenPos, CompletableFuture fileFuture) { if (scriptProvider == null) { - FlutterUtils.warn(LOG, "attempted to get source position before connected to observatory"); + LOG.warn("attempted to get source position before connected to observatory"); return null; } @@ -379,13 +380,13 @@ static Analyzer create(@NotNull Project project, @NotNull VirtualFile sourceLoca } if (!dartAnalysisServerService.serverReadyForRequest()) { - FlutterUtils.warn(LOG, "Dart analysis server is not running. Some breakpoints may not work."); + LOG.warn("Dart analysis server is not running. Some breakpoints may not work."); return null; } final String contextId = dartAnalysisServerService.execution_createContext(sourceLocation.getPath()); if (contextId == null) { - FlutterUtils.warn(LOG, "Failed to get execution context from analysis server. Some breakpoints may not work."); + LOG.warn("Failed to get execution context from analysis server. Some breakpoints may not work."); return null; } diff --git a/src/io/flutter/run/FlutterReloadManager.java b/src/io/flutter/run/FlutterReloadManager.java index e1e2521d6f..ae0c74e2c5 100644 --- a/src/io/flutter/run/FlutterReloadManager.java +++ b/src/io/flutter/run/FlutterReloadManager.java @@ -55,6 +55,7 @@ import io.flutter.bazel.Workspace; import io.flutter.bazel.WorkspaceCache; import io.flutter.dart.FlutterDartAnalysisServer; +import io.flutter.logging.PluginLogger; import io.flutter.run.common.RunMode; import io.flutter.run.daemon.FlutterApp; import io.flutter.settings.FlutterSettings; @@ -74,7 +75,7 @@ * Handle the mechanics of performing a hot reload on file save. */ public class FlutterReloadManager { - private static final @NotNull Logger LOG = Logger.getInstance(FlutterReloadManager.class); + private static final @NotNull Logger LOG = PluginLogger.createLogger(FlutterReloadManager.class); private static final Map toolWindowNotificationGroups = new HashMap<>(); @@ -142,7 +143,11 @@ public void beforeActionPerformed(@NotNull AnAction action, @NotNull AnActionEve } catch (Throwable t) { // A catch-all, so any exceptions don't bubble through to the users. - LOG.warn("Exception from FlutterReloadManager", t); + if (FlutterSettings.getInstance().isFilePathLoggingEnabled()) { + LOG.warn("Exception from FlutterReloadManager", t); + } else { + LOG.warn("Exception from FlutterReloadManager: " + t.getMessage()); + } } } @@ -161,7 +166,11 @@ public void afterActionPerformed(@NotNull AnAction action, @NotNull AnActionEven handleSaveAllNotification(eventEditor); } catch (Throwable t) { - FlutterUtils.warn(LOG, "Exception from hot reload on save", t); + if (FlutterSettings.getInstance().isFilePathLoggingEnabled()) { + LOG.warn("Exception from hot reload on save", t); + } else { + LOG.warn("Exception from hot reload on save: " + t.getMessage()); + } } finally { // Context: "Released EditorImpl held by lambda in FlutterReloadManager" (https://github.com/flutter/flutter-intellij/issues/7507) @@ -325,7 +334,11 @@ private void syncFiles() { } } catch (ExecutionException | InterruptedException e) { - LOG.error("Unable to sync files: " + e); + if (FlutterSettings.getInstance().isFilePathLoggingEnabled()) { + LOG.error("Unable to sync files", e); + } else { + LOG.error("Unable to sync files: " + e.getMessage()); + } } } From 3fd2ab80e5a9fd4c80a13878a189e72b7ef271c2 Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Thu, 11 Sep 2025 18:38:03 -0700 Subject: [PATCH 2/4] Change open DevTools to use PluginLogger --- src/io/flutter/run/OpenDevToolsAction.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/io/flutter/run/OpenDevToolsAction.java b/src/io/flutter/run/OpenDevToolsAction.java index 843c84d7a6..faf72d3538 100644 --- a/src/io/flutter/run/OpenDevToolsAction.java +++ b/src/io/flutter/run/OpenDevToolsAction.java @@ -17,9 +17,11 @@ import io.flutter.bazel.WorkspaceCache; import io.flutter.devtools.DevToolsIdeFeature; import io.flutter.devtools.DevToolsUrl; +import io.flutter.logging.PluginLogger; import io.flutter.run.daemon.DevToolsService; import io.flutter.run.daemon.FlutterApp; import io.flutter.sdk.FlutterSdk; +import io.flutter.settings.FlutterSettings; import io.flutter.utils.AsyncUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -27,7 +29,7 @@ import java.util.Objects; public class OpenDevToolsAction extends DumbAwareAction { - private static final @NotNull Logger LOG = Logger.getInstance(OpenDevToolsAction.class); + private static final @NotNull Logger LOG = PluginLogger.createLogger(OpenDevToolsAction.class); private static final String title = "Open Flutter DevTools in Browser"; private final @Nullable ObservatoryConnector myConnector; private final Computable myIsApplicable; @@ -76,7 +78,11 @@ public void actionPerformed(@NotNull final AnActionEvent event) { } if (ex != null) { - LOG.error(ex); + if (FlutterSettings.getInstance().isFilePathLoggingEnabled()) { + LOG.error(ex); + } else { + LOG.error("Exception in getDevToolsInstance: " + ex.getMessage()); + } return; } From 2b5a66f5e2e7b6bf61eb2baadd486c0a099be490 Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Thu, 11 Sep 2025 18:44:13 -0700 Subject: [PATCH 3/4] Change SDK run config to use PluginLogger --- src/io/flutter/run/SdkRunConfig.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/io/flutter/run/SdkRunConfig.java b/src/io/flutter/run/SdkRunConfig.java index d311d120bb..9e26f5f5dd 100644 --- a/src/io/flutter/run/SdkRunConfig.java +++ b/src/io/flutter/run/SdkRunConfig.java @@ -40,9 +40,11 @@ import io.flutter.FlutterUtils; import io.flutter.console.FlutterConsoleFilter; import io.flutter.dart.FlutterDartAnalysisServer; +import io.flutter.logging.PluginLogger; import io.flutter.run.common.RunMode; import io.flutter.run.daemon.FlutterApp; import io.flutter.sdk.FlutterSdkManager; +import io.flutter.settings.FlutterSettings; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -59,7 +61,7 @@ public class SdkRunConfig extends LocatableConfigurationBase implements LaunchState.RunConfig, RefactoringListenerProvider, RunConfigurationWithSuppressedDefaultRunAction { - private static final @NotNull Logger LOG = Logger.getInstance(SdkRunConfig.class); + private static final @NotNull Logger LOG = PluginLogger.createLogger(SdkRunConfig.class); private boolean firstRun = true; private @NotNull SdkFields fields = new SdkFields(); @@ -117,7 +119,7 @@ public static class RecursiveDeleter extends SimpleFileVisitor { @Override public @NotNull FileVisitResult visitFileFailed(@NotNull Path file, @NotNull IOException exc) { - FlutterUtils.warn(LOG, "Unable to visit file", exc, true); + FlutterUtils.warn(LOG, "Unable to visit file in RecursiveDeleter", exc, true); return CONTINUE; } } @@ -165,7 +167,8 @@ public LaunchState getState(@NotNull Executor executor, @NotNull ExecutionEnviro existingJson = Files.readString(cachedParametersPath); } catch (IOException e) { - FlutterUtils.warn(LOG, "Unable to get existing json from " + cachedParametersPath); + LOG.warn("Unable to get existing json from " + + (FlutterSettings.getInstance().isFilePathLoggingEnabled() ? cachedParametersPath : cachedParametersPath.getFileName())); } } if (!StringUtil.equals(json, existingJson)) { From ac70b1f828fb1e8a5e3df14430faa7a0855ac70d Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Fri, 12 Sep 2025 12:59:19 -0700 Subject: [PATCH 4/4] Use util log method --- src/io/flutter/FlutterUtils.java | 16 ++++++++++++---- src/io/flutter/run/FlutterReloadManager.java | 18 +++--------------- src/io/flutter/run/OpenDevToolsAction.java | 7 ++----- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/io/flutter/FlutterUtils.java b/src/io/flutter/FlutterUtils.java index 54ea361af1..0c68d70647 100644 --- a/src/io/flutter/FlutterUtils.java +++ b/src/io/flutter/FlutterUtils.java @@ -111,22 +111,30 @@ public static boolean isAndroidStudio() { } } - public static void info(@NotNull Logger logger, @NotNull String message, @NotNull Exception e, boolean sanitizePaths) { + public static void info(@NotNull Logger logger, @NotNull String message, @NotNull Throwable t, boolean sanitizePaths) { if (sanitizePaths && FlutterSettings.getInstance().isFilePathLoggingEnabled()) { - logger.info(message, e); + logger.info(message, t); } else { logger.info(message); } } - public static void warn(@NotNull Logger logger, @NotNull String message, @NotNull Exception e, boolean sanitizePaths) { + public static void warn(@NotNull Logger logger, @NotNull String message, @NotNull Throwable t, boolean sanitizePaths) { if (sanitizePaths && FlutterSettings.getInstance().isFilePathLoggingEnabled()) { - logger.warn(message, e); + logger.warn(message, t); } else { logger.warn(message); } } + public static void error(@NotNull Logger logger, @NotNull String message, @NotNull Throwable t, boolean sanitizePaths) { + if (sanitizePaths && FlutterSettings.getInstance().isFilePathLoggingEnabled()) { + logger.error(message, t); + } else { + logger.error(message); + } + } + /** * Write a warning message to the IntelliJ log. *

diff --git a/src/io/flutter/run/FlutterReloadManager.java b/src/io/flutter/run/FlutterReloadManager.java index ae0c74e2c5..75bbeb7f0c 100644 --- a/src/io/flutter/run/FlutterReloadManager.java +++ b/src/io/flutter/run/FlutterReloadManager.java @@ -143,11 +143,7 @@ public void beforeActionPerformed(@NotNull AnAction action, @NotNull AnActionEve } catch (Throwable t) { // A catch-all, so any exceptions don't bubble through to the users. - if (FlutterSettings.getInstance().isFilePathLoggingEnabled()) { - LOG.warn("Exception from FlutterReloadManager", t); - } else { - LOG.warn("Exception from FlutterReloadManager: " + t.getMessage()); - } + FlutterUtils.warn(LOG, "Exception from FlutterReloadManager", t, true); } } @@ -166,11 +162,7 @@ public void afterActionPerformed(@NotNull AnAction action, @NotNull AnActionEven handleSaveAllNotification(eventEditor); } catch (Throwable t) { - if (FlutterSettings.getInstance().isFilePathLoggingEnabled()) { - LOG.warn("Exception from hot reload on save", t); - } else { - LOG.warn("Exception from hot reload on save: " + t.getMessage()); - } + FlutterUtils.warn(LOG, "Exception from hot reload on save", t, true); } finally { // Context: "Released EditorImpl held by lambda in FlutterReloadManager" (https://github.com/flutter/flutter-intellij/issues/7507) @@ -334,11 +326,7 @@ private void syncFiles() { } } catch (ExecutionException | InterruptedException e) { - if (FlutterSettings.getInstance().isFilePathLoggingEnabled()) { - LOG.error("Unable to sync files", e); - } else { - LOG.error("Unable to sync files: " + e.getMessage()); - } + FlutterUtils.error(LOG, "Unable to sync files", e, true); } } diff --git a/src/io/flutter/run/OpenDevToolsAction.java b/src/io/flutter/run/OpenDevToolsAction.java index faf72d3538..5a2aeb2ab8 100644 --- a/src/io/flutter/run/OpenDevToolsAction.java +++ b/src/io/flutter/run/OpenDevToolsAction.java @@ -13,6 +13,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import icons.FlutterIcons; +import io.flutter.FlutterUtils; import io.flutter.ObservatoryConnector; import io.flutter.bazel.WorkspaceCache; import io.flutter.devtools.DevToolsIdeFeature; @@ -78,11 +79,7 @@ public void actionPerformed(@NotNull final AnActionEvent event) { } if (ex != null) { - if (FlutterSettings.getInstance().isFilePathLoggingEnabled()) { - LOG.error(ex); - } else { - LOG.error("Exception in getDevToolsInstance: " + ex.getMessage()); - } + FlutterUtils.error(LOG, "Exception in getDevToolsInstance", ex, true); return; }