diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java index 01086898f..346775375 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Assert; @@ -132,6 +133,8 @@ public class DelegatingStreamConnectionProvider implements StreamConnectionProvi @Override public void stop() { + BootLanguageServerPlugin.getDefault().getLog().info("DelegatingStreamConnectionProvider - Stopping Boot LS"); + BootLanguageServerPlugin.getDefault().getLog().info("DelegatingStreamConnectionProvider: \n" + Arrays.stream(Thread.currentThread().getStackTrace()).map(se -> se.toString()).collect(Collectors.joining("\n"))); this.provider.stop(); if (fResourceListener != null) { ResourcesPlugin.getWorkspace().removeResourceChangeListener(fResourceListener); diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java index 9d3aeb983..534f71a3e 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/SpringBootLanguageServer.java @@ -16,9 +16,12 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; +import org.eclipse.core.runtime.IPath; import org.springframework.tooling.ls.eclipse.commons.JRE; import org.springframework.tooling.ls.eclipse.commons.JRE.MissingJDKException; +import org.springframework.tooling.ls.eclipse.commons.LanguageServerCommonsActivator; import org.springframework.tooling.ls.eclipse.commons.STS4LanguageServerProcessStreamConnector; +import org.springframework.tooling.ls.eclipse.commons.preferences.LanguageServerConsolePreferenceConstants; /** * @author Martin Lippert @@ -48,6 +51,14 @@ public class SpringBootLanguageServer extends STS4LanguageServerProcessStreamCon args.add("-XX:+HeapDumpOnOutOfMemoryError"); args.add("-XX:TieredStopAtLevel=1"); + if (!LanguageServerCommonsActivator.getInstance().getPreferenceStore().getBoolean(LanguageServerConsolePreferenceConstants.PREF_BOOT_JAVA_CONSOLE_ENABLED)) { + IPath logFile = BootLanguageServerPlugin.getDefault().getStateLocation().addTrailingSeparator().append("boot-ls-" + System.currentTimeMillis() + ".log"); + args.add("-Dsts.log.file=" + logFile.toFile().getPath()); + } + + IPath fatalErrorFile = BootLanguageServerPlugin.getDefault().getStateLocation().addTrailingSeparator().append("fatal-eror-boot-ls-" + System.currentTimeMillis() + ".log"); + args.add("-XX:ErrorFile=" + fatalErrorFile.toFile().getPath()); + addCustomJVMArgs(args); return args; diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Startup.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Startup.java index fbc84c8d0..80b1224b1 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Startup.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Startup.java @@ -33,12 +33,13 @@ public class Startup implements IStartup { new BootProjectTracker(Logger.forEclipsePlugin(() -> BootLanguageServerPlugin.getDefault()), List.of(springProjects -> { if (!started && !springProjects.isEmpty()) { - + BootLanguageServerPlugin.getDefault().getLog().info("Starting Boot LS..."); LanguageServerDefinition serverDefinition = LanguageServersRegistry.getInstance() .getDefinition(BOOT_LS_DEFINITION_ID); try { LanguageServiceAccessor.startLanguageServer(serverDefinition); + BootLanguageServerPlugin.getDefault().getLog().info("Started Boot LS process"); started = true; } catch (IOException e1) { BootLanguageServerPlugin.getDefault().getLog().error("Failed to launch Boot Language Server", e1); diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/BootProjectTracker.java b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/BootProjectTracker.java index cdc29da99..dbfa3f367 100644 --- a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/BootProjectTracker.java +++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/BootProjectTracker.java @@ -40,6 +40,7 @@ public class BootProjectTracker { @Override public void classpathChanged(IJavaProject jp) { + logger.log("Classpath changed for project: " + jp.getElementName()); processProject(jp); } }); @@ -56,10 +57,12 @@ public class BootProjectTracker { private void processProject(IJavaProject jp) { if (isSpringProject(jp)) { if (springProjects.add(jp)) { + logger.log("Boot project ADDED: " + jp.getElementName()); fireEvent(); } } else { if (springProjects.remove(jp)) { + logger.log("Boot project REMOVED: " + jp.getElementName()); fireEvent(); } }