Revision: 7047 Author: [email protected] Date: Thu Nov 19 14:41:30 2009 Log: Merge tr...@r7046 into releases/2.0. Command used to perform this merge was:
svn merge -c7046 --ignore-ancestry http://google-web-toolkit.googlecode.com/svn/trunk . http://code.google.com/p/google-web-toolkit/source/detail?r=7047 Modified: /releases/2.0/dev/core/src/com/google/gwt/dev/DevMode.java /releases/2.0/dev/core/src/com/google/gwt/dev/DevModeBase.java /releases/2.0/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java ======================================= --- /releases/2.0/dev/core/src/com/google/gwt/dev/DevMode.java Thu Nov 19 14:34:20 2009 +++ /releases/2.0/dev/core/src/com/google/gwt/dev/DevMode.java Thu Nov 19 14:41:30 2009 @@ -345,8 +345,17 @@ TreeLogger serverLogger = ui.getWebServerLogger(getWebServerName(), null); serverLogger.log(TreeLogger.TRACE, "Starting HTTP on port " + getPort(), null); - server = options.getServletContainerLauncher().start(serverLogger, - getPort(), options.getWarDir()); + + ServletContainerLauncher scl = options.getServletContainerLauncher(); + /* + * TODO: This is a hack to pass the base log level to the SCL. We'll have + * to figure out a better way to do this for SCLs in general. + */ + if (scl instanceof JettyLauncher) { + ((JettyLauncher) scl).setBaseLogLevel(getBaseLogLevelForUI()); + } + + server = scl.start(serverLogger, getPort(), options.getWarDir()); assert (server != null); return server.getPort(); } catch (BindException e) { ======================================= --- /releases/2.0/dev/core/src/com/google/gwt/dev/DevModeBase.java Thu Nov 19 14:34:20 2009 +++ /releases/2.0/dev/core/src/com/google/gwt/dev/DevModeBase.java Thu Nov 19 14:41:30 2009 @@ -141,7 +141,7 @@ private static final String CODE_SERVER_PORT_TAG = "-codeServerPort"; private static final String DEFAULT_PORT = "9997"; - + private final OptionCodeServerPort options; public ArgHandlerCodeServerPort(OptionCodeServerPort options) { @@ -155,8 +155,8 @@ @Override public String getPurpose() { - return "Specifies the TCP port for the code server (defaults to " + - DEFAULT_PORT + ")"; + return "Specifies the TCP port for the code server (defaults to " + + DEFAULT_PORT + ")"; } @Override @@ -370,7 +370,7 @@ return BrowserWidgetHostChecker.whitelistRegexes(whitelistStr); } } - + protected interface HostedModeBaseOptions extends JJSOptions, OptionLogDir, OptionLogLevel, OptionGenDir, OptionNoServer, OptionPort, OptionCodeServerPort, OptionStartupURLs, OptionRemoteUI { @@ -574,7 +574,7 @@ private static final AtomicLong uniqueId = new AtomicLong(); - public static String normalizeURL(String unknownUrlText, int port, + public static String normalizeURL(String unknownUrlText, int port, String host) { if (unknownUrlText.indexOf(":") != -1) { // Assume it's a full url. @@ -647,6 +647,7 @@ protected final HostedModeBaseOptions options; protected DevModeUI ui = null; + protected TreeLogger.Type baseLogLevelForUI = null; /** * Cheat on the first load's refresh by assuming the module loaded by @@ -676,6 +677,20 @@ public final void addStartupURL(String url) { options.addStartupURL(url); } + + /** + * Gets the base log level recommended by the UI for INFO-level messages. This + * method can only be called once {...@link #createUI()} has been called. Please + * do not depend on this method, as it is subject to change. + */ + public TreeLogger.Type getBaseLogLevelForUI() { + if (baseLogLevelForUI == null) { + throw new IllegalStateException( + "The ui must be created before calling this method."); + } + + return baseLogLevelForUI; + } public final int getPort() { return options.getPort(); @@ -701,8 +716,8 @@ URL url = processUrl(startupURL); startupUrls.put(prenormalized, url); } catch (UnableToCompleteException e) { - logger.log(TreeLogger.ERROR, - "Unable to process startup URL " + startupURL, null); + logger.log(TreeLogger.ERROR, "Unable to process startup URL " + + startupURL, null); } } ui.setStartupUrls(startupUrls); @@ -959,8 +974,8 @@ return false; } options.setPort(resultPort); - getTopLogger().log(TreeLogger.TRACE, "Started web server on port " - + resultPort); + getTopLogger().log(TreeLogger.TRACE, + "Started web server on port " + resultPort); } return true; @@ -977,18 +992,32 @@ }; } + /** + * Create the UI and set the base log level for the UI. + */ private DevModeUI createUI() { + DevModeUI newUI = null; + if (headlessMode) { - return new HeadlessUI(options); + newUI = new HeadlessUI(options); } else { if (options.useRemoteUI()) { - return new RemoteUI(options.getRemoteUIHost(), + newUI = new RemoteUI(options.getRemoteUIHost(), options.getRemoteUIHostPort(), options.getClientId(), options.getPort(), options.getCodeServerPort()); + baseLogLevelForUI = TreeLogger.Type.TRACE; } } - return new SwingUI(options); + if (newUI == null) { + newUI = new SwingUI(options); + } + + if (baseLogLevelForUI == null) { + baseLogLevelForUI = TreeLogger.Type.INFO; + } + + return newUI; } /** ======================================= --- /releases/2.0/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java Wed Nov 18 14:09:08 2009 +++ /releases/2.0/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java Thu Nov 19 14:41:30 2009 @@ -52,9 +52,12 @@ RequestLog { private final TreeLogger logger; - - public JettyRequestLogger(TreeLogger logger) { + private final TreeLogger.Type normalLogLevel; + + public JettyRequestLogger(TreeLogger logger, TreeLogger.Type normalLogLevel) { this.logger = logger; + assert (normalLogLevel != null); + this.normalLogLevel = normalLogLevel; } /** @@ -70,14 +73,29 @@ TreeLogger.Type logStatus, logHeaders; if (status >= 500) { logStatus = TreeLogger.ERROR; + logHeaders = TreeLogger.INFO; + } else if (status == 404) { + if ("/favicon.ico".equals(request.getRequestURI()) + && request.getQueryString() == null) { + /* + * We do not want to call the developer's attention to a 404 when + * requesting favicon.ico. This is a very common 404. + */ + logStatus = normalLogLevel; + logHeaders = TreeLogger.DEBUG; + } else { + logStatus = TreeLogger.WARN; + logHeaders = TreeLogger.INFO; + } logHeaders = TreeLogger.INFO; } else if (status >= 400) { logStatus = TreeLogger.WARN; logHeaders = TreeLogger.INFO; } else { - logStatus = TreeLogger.INFO; + logStatus = normalLogLevel; logHeaders = TreeLogger.DEBUG; } + String userString = request.getRemoteUser(); if (userString == null) { userString = ""; @@ -235,7 +253,7 @@ try { server.stop(); server.setStopAtShutdown(false); - branch.log(TreeLogger.INFO, "Stopped successfully"); + branch.log(TreeLogger.TRACE, "Stopped successfully"); } catch (Exception e) { branch.log(TreeLogger.ERROR, "Unable to stop embedded Jetty server", e); throw new UnableToCompleteException(); @@ -405,8 +423,8 @@ private final TreeLogger logger; /** - * In the usual case of launching {...@link com.google.gwt.dev.DevMode}, - * this will always by the system app ClassLoader. + * In the usual case of launching {...@link com.google.gwt.dev.DevMode}, this + * will always by the system app ClassLoader. */ private final ClassLoader systemClassLoader = Thread.currentThread().getContextClassLoader(); @@ -457,6 +475,9 @@ "org.eclipse.jdt.core.JDTCompilerAdapter"); System.setProperty("build.compiler", antJavaC); } + + private final Object privateInstanceLock = new Object(); + private TreeLogger.Type baseLogLevel; @Override public String getIconPath() { @@ -467,6 +488,17 @@ public String getName() { return "Jetty"; } + + /* + * TODO: This is a hack to pass the base log level to the SCL. We'll have to + * figure out a better way to do this for SCLs in general. Please do not + * depend on this method, as it is subject to change. + */ + public void setBaseLogLevel(TreeLogger.Type baseLogLevel) { + synchronized (privateInstanceLock) { + this.baseLogLevel = baseLogLevel; + } + } @Override public ServletContainer start(TreeLogger logger, int port, File appRootDir) @@ -499,7 +531,7 @@ appRootDir.getAbsolutePath(), "/"); RequestLogHandler logHandler = new RequestLogHandler(); - logHandler.setRequestLog(new JettyRequestLogger(logger)); + logHandler.setRequestLog(new JettyRequestLogger(logger, getBaseLogLevel())); logHandler.setHandler(wac); server.setHandler(logHandler); server.start(); @@ -530,5 +562,15 @@ throw new NullPointerException("app root direcotry cannot be null"); } } + + /* + * TODO: This is a hack to pass the base log level to the SCL. We'll have to + * figure out a better way to do this for SCLs in general. + */ + private TreeLogger.Type getBaseLogLevel() { + synchronized (privateInstanceLock) { + return this.baseLogLevel; + } + } } -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
