diff --git a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/EventHub.java b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/EventHub.java index 285929c20..db7f8934f 100644 --- a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/EventHub.java +++ b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/EventHub.java @@ -34,6 +34,7 @@ public class EventHub implements IEventHub { private static final Logger logger = Logger.getLogger(Configuration.LOGGER_NAME); private PublishSubject subject = PublishSubject.create(); + @Override public Observable events() { return subject; } @@ -47,6 +48,7 @@ public Observable events() { * @param vm * the target virtual machine. */ + @Override public void start(VirtualMachine vm) { if (isClosed) { throw new IllegalStateException("This event hub is already closed."); @@ -66,7 +68,7 @@ public void start(VirtualMachine vm) { boolean shouldResume = true; for (Event event : set) { try { - logger.info("\nJDI Event: " + event + "\n"); + logger.fine("\nJDI Event: " + event + "\n"); } catch (VMDisconnectedException e) { // do nothing } @@ -109,6 +111,7 @@ public void close() { * Gets the observable object for breakpoint events. * @return the observable object for breakpoint events */ + @Override public Observable breakpointEvents() { return this.events().filter(debugEvent -> debugEvent.event instanceof BreakpointEvent); } @@ -117,6 +120,7 @@ public Observable breakpointEvents() { * Gets the observable object for thread events. * @return the observable object for thread events */ + @Override public Observable threadEvents() { return this.events().filter(debugEvent -> debugEvent.event instanceof ThreadStartEvent || debugEvent.event instanceof ThreadDeathEvent); @@ -126,6 +130,7 @@ public Observable threadEvents() { * Gets the observable object for exception events. * @return the observable object for exception events */ + @Override public Observable exceptionEvents() { return this.events().filter(debugEvent -> debugEvent.event instanceof ExceptionEvent); } @@ -134,6 +139,7 @@ public Observable exceptionEvents() { * Gets the observable object for step events. * @return the observable object for step events */ + @Override public Observable stepEvents() { return this.events().filter(debugEvent -> debugEvent.event instanceof StepEvent); } @@ -142,6 +148,7 @@ public Observable stepEvents() { * Gets the observable object for vm events. * @return the observable object for vm events */ + @Override public Observable vmEvents() { return this.events().filter(debugEvent -> debugEvent.event instanceof VMStartEvent || debugEvent.event instanceof VMDisconnectEvent diff --git a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/ProtocolServer.java b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/ProtocolServer.java index 11f2b57b5..172db6ce7 100644 --- a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/ProtocolServer.java +++ b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/ProtocolServer.java @@ -157,7 +157,7 @@ private void sendMessage(Messages.ProtocolMessage message) { String utf8Data = new String(data, PROTOCOL_ENCODING); try { - logger.info("\n[[RESPONSE]]\n" + new String(data)); + logger.fine("\n[[RESPONSE]]\n" + new String(data)); this.writer.write(utf8Data); this.writer.flush(); } catch (IOException e) { @@ -196,7 +196,7 @@ private void processData() { private void dispatchRequest(String request) { try { - logger.info("\n[REQUEST]\n" + request); + logger.fine("\n[REQUEST]\n" + request); Messages.Request message = JsonUtils.fromJson(request, Messages.Request.class); usageDataSession.recordRequest(message); if (message.type.equals("request")) { diff --git a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/LaunchRequestHandler.java b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/LaunchRequestHandler.java index c2f766a38..c1f775259 100644 --- a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/LaunchRequestHandler.java +++ b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/LaunchRequestHandler.java @@ -93,7 +93,7 @@ public void handle(Command command, Arguments arguments, Response response, IDeb try { logger.info(String.format("Trying to launch Java Program with options \"%s -cp %s %s %s\" .", - launchArguments.vmArgs, launchArguments.classPaths, launchArguments.mainClass, launchArguments.args)); + launchArguments.vmArgs, StringUtils.join(launchArguments.classPaths, ";"), launchArguments.mainClass, launchArguments.args)); IDebugSession debugSession = DebugUtility.launch(vmProvider.getVirtualMachineManager(), launchArguments.mainClass, launchArguments.args, launchArguments.vmArgs, Arrays.asList(launchArguments.classPaths)); context.setDebugSession(debugSession); diff --git a/com.microsoft.java.debug.plugin/plugin.xml b/com.microsoft.java.debug.plugin/plugin.xml index 7a17b1d91..5ab528c46 100644 --- a/com.microsoft.java.debug.plugin/plugin.xml +++ b/com.microsoft.java.debug.plugin/plugin.xml @@ -7,6 +7,7 @@ + diff --git a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebugDelegateCommandHandler.java b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebugDelegateCommandHandler.java index 50e27aaba..f563111d8 100644 --- a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebugDelegateCommandHandler.java +++ b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebugDelegateCommandHandler.java @@ -28,6 +28,9 @@ public class JavaDebugDelegateCommandHandler implements IDelegateCommandHandler public static String BUILD_WORKSPACE = "vscode.java.buildWorkspace"; + public static String CONFIG_LOG_LEVEL = "vscode.java.configLogLevel"; + + @Override public Object executeCommand(String commandId, List arguments, IProgressMonitor progress) throws Exception { if (DEBUG_STARTSESSION.equals(commandId)) { @@ -41,6 +44,8 @@ public Object executeCommand(String commandId, List arguments, IProgress // TODO } else if (FETCH_USER_DATA.equals(commandId)) { return UsageDataStore.getInstance().fetchAll(); + } else if (CONFIG_LOG_LEVEL.equals(commandId)) { + return LogUtils.configLogLevel(arguments); } throw new UnsupportedOperationException(String.format("Java debug plugin doesn't support the command '%s'.", commandId)); diff --git a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebuggerServerPlugin.java b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebuggerServerPlugin.java index 750402b8a..e4d24018f 100644 --- a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebuggerServerPlugin.java +++ b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebuggerServerPlugin.java @@ -21,7 +21,6 @@ public class JavaDebuggerServerPlugin implements BundleActivator { private static final Logger logger = Logger.getLogger(Configuration.LOGGER_NAME); - private static final Logger usageDataLogger = Logger.getLogger(Configuration.USAGE_DATA_LOGGER_NAME); public static final String PLUGIN_ID = "com.microsoft.java.debug"; public static BundleContext context = null; @@ -29,9 +28,7 @@ public class JavaDebuggerServerPlugin implements BundleActivator { @Override public void start(BundleContext context) throws Exception { JavaDebuggerServerPlugin.context = context; - logger.addHandler(new JdtLogHandler()); - logger.addHandler(new UsageDataLogHandler(Level.SEVERE)); - usageDataLogger.addHandler(new UsageDataLogHandler(Level.ALL)); + LogUtils.initialize(Level.INFO); logger.info("Starting " + PLUGIN_ID); } diff --git a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JdtLogHandler.java b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JdtLogHandler.java index 6f836e21a..8c04e640c 100644 --- a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JdtLogHandler.java +++ b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JdtLogHandler.java @@ -21,15 +21,21 @@ class JdtLogHandler extends Handler { + @Override public void close() { // do nothing } + @Override public void flush() { // do nothing } + @Override public void publish(LogRecord record) { + if (!isLoggable(record)) { + return; + } int severity = IStatus.INFO; if (record.getLevel() == Level.SEVERE) { severity = IStatus.ERROR; diff --git a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/LogUtils.java b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/LogUtils.java new file mode 100644 index 000000000..ad3d230dc --- /dev/null +++ b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/LogUtils.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2017 Microsoft Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Microsoft Corporation - initial API and implementation + *******************************************************************************/ + +package com.microsoft.java.debug.plugin.internal; + +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.apache.commons.lang3.StringUtils; + +import com.microsoft.java.debug.core.Configuration; + +public final class LogUtils { + private static final Logger logger = Logger.getLogger(Configuration.LOGGER_NAME); + private static final Logger usageDataLogger = Logger.getLogger(Configuration.USAGE_DATA_LOGGER_NAME); + + + /** + * Initialize logger for logger level and logger handler. + * @param level the logger level for java debugger. + */ + public static void initialize(Level level) { + logger.addHandler(new JdtLogHandler()); + logger.addHandler(new UsageDataLogHandler(Level.SEVERE)); + usageDataLogger.addHandler(new UsageDataLogHandler(Level.ALL)); + logger.setLevel(level); + } + + /** + * Configure log level setting for java debugger. + * @param arguments the first element of the arguments should be the String representation of level(info, fine, warning..). + */ + public static Object configLogLevel(List arguments) { + if (arguments != null && arguments.size() == 1 && arguments.get(0) instanceof String) { + try { + logger.setLevel(Level.parse((String) arguments.get(0))); + logger.info(String.format("Set log level to : %s", arguments.get(0))); + return logger.getLevel().toString(); + } catch (IllegalArgumentException e) { + logger.severe(String.format("Invalid log level: %s", arguments.get(0))); + } + + } else { + logger.severe(String.format("Invalid parameters for configLogLevel: %s", StringUtils.join(arguments))); + } + return null; + } + +}