【发布时间】:2012-03-04 01:57:50
【问题描述】:
我正在调试一个 GWT 应用程序,我需要将一些内容打印到控制台以进行测试。 System.out.println 和 GWT.log 不起作用。有人有什么想法吗?
【问题讨论】:
-
试试这里发布的答案:stackoverflow.com/questions/17463928/…
标签: gwt
我正在调试一个 GWT 应用程序,我需要将一些内容打印到控制台以进行测试。 System.out.println 和 GWT.log 不起作用。有人有什么想法吗?
【问题讨论】:
标签: gwt
引用文档:
添加 GWT 日志记录真的很简单,就像下面的代码示例一样简单。但是 - 了解日志记录的工作原理,以及 如何正确配置它很重要,所以请花点时间 阅读本文档的其余部分。
http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html
启用日志记录的最简单方法是:
# In your .gwt.xml file
<inherits name="com.google.gwt.logging.Logging"/>
# In your .java file
Logger logger = java.util.logging.Logger.getLogger("NameOfYourLogger");
logger.log(Level.SEVERE, "this message should get logged");
【讨论】:
我需要在通过 PhoneGap(和 gwt-phonegap)部署到 Android 设备/模拟器的 GWT 应用程序的上下文中执行此操作。上面的 System.out.println() 和 GWT 日志记录(带有模块声明)都没有出现在 Android 的 logcat 中,所以我对 console.log 使用了一个简单的 JSNI 包装器:
public void onModuleLoad()
{
Logger logger = Logger.getLogger("Test1.java");
logger.log(Level.INFO, "ash: starting onModuleLoad (1)"); // not in logcat
System.out.println( "ash: starting onModuleLoad (2)" ); // not in logcat
consoleLog( "ash: starting onModuleLoad (3)" ); // This shows up
...
}
native void consoleLog( String message) /*-{
console.log( "me:" + message );
}-*/;
【讨论】:
我也有这个问题。 GWT 日志有效,但因为它全部转换为 javascript,它会打印到客户端输出,所以只需查看浏览器的控制台,它们就会出现。在谷歌浏览器中点击右上角的三行自定义按钮,点击工具-->开发者工具,会弹出控制台。您的抢手陈述将在那里。此外,Ctrl+Shift+I 是启动它的快捷方式。如果您想打印到服务器,我相信记录器处理程序等是有序的?
【讨论】:
第一个答案中的文档 url 已经提供了不同的配置选项来登录到不同的位置。 我编写的这个框架为您提供了一个有用的 API,并允许您选择您的服务器端日志记录实现。 看一看 : https://code.google.com/p/gwt-usefull-logging/
【讨论】:
我建议您使用GWT Developer mode 它会增加一点开销,导致代码服务器上的自动编译和代码分配,但是当您的应用程序的客户端出现一些异常时,它是非常清楚的。我的意思是,有时 chrome 控制台(或 firebug 或任何浏览器调试内置工具)在这些情况下并没有说太多,相信我,当你试图弄清楚发生了什么时,找到 NullPointerException 是一件很痛苦的事情通过提醒您的代码。
【讨论】:
为了打印到浏览器控制台,我使用的是这样的:
public class EventLogger {
public static void logEvent(String subsys, String grp, String type) {
logEvent(GWT.getModuleName(), subsys, grp,
Duration.currentTimeMillis(), type);
}
public static native void logEvent(String module, String subsys,
String grp, double millis, String type)
/*-{
if ($wnd.__gwtStatsEvent) {
$wnd.__gwtStatsEvent({
'moduleName':module,
'subSystem':subsys,
'evtGroup':grp,
'millis':millis,
'type':type
});
}
}-*/;
}
【讨论】:
要登录到浏览器控制台,您可以使用本机以非常简单的方式进行。对调试很有帮助。
如果你像下面这样添加一个本地方法,你可以从你想要的地方向它发送一个字符串,它会在浏览器控制台中记录它。
public static native void console(String text)
/*-{
console.log(text);
}-*/;
有关在 GWT 中使用本机的更多信息: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
【讨论】:
在 GWT 2.6.0 版本中,方法 GWT.log 将消息写入浏览器控制台,您不需要编写本地方法。
【讨论】:
只是在一个 sn-p 中总结了mreppy 和Strelok 的答案中显示的不同可能性。我还为 IE 异常添加了一种可能的解决方法,如下所述:Why does JavaScript only work after opening developer tools in IE once?
java.util.logging.Logger logger = Logger.getLogger(this.getClass().getSimpleName());
native void jsConsoleLog(String message) /*-{
try {
console.log(message);
} catch (e) {
}
}-*/;
private void log(final String message) {
// Logs to Dev mode console only
GWT.log(message);
// Logs to Dev mode and JavaScript console (requires configuration)
this.logger.log(Level.FINEST, message);
// Logs to JavaScript console only
jsConsoleLog(message);
【讨论】:
使用本机控制台的另一个变体...
添加这个类:
package XXX.XXX.XXX.XXX;
public class Debug {
private static boolean isEnabled_ = false;
public static void enable() { isEnabled_ = true; }
public static void setEnabled( final boolean isEnabled )
{ isEnabled_ = isEnabled; }
public static void log( final String s )
{ if( isEnabled_ ) nativeConsoleLog( s ); }
private static native void nativeConsoleLog( String s )
/*-{ console.log( s ); }-*/;
}
然后,在某个时候使用它启用调试,例如在启动应用程序时:
public class XXXXXX implements EntryPoint {
@Override
public void onModuleLoad() {
Debug.enable();
...
}
}
然后像这样使用它:
Debug.log("Hello World!");
【讨论】:
你可以把 alaert.Alert("");在您的 gwt 代码中编译并运行它,当您发出请求或在您放置警报的操作时,您将在浏览器上弹出窗口
【讨论】: