我正在调试GWT应用程序,我需要将一些内容打印到控制台以进行测试。 System.out.println
和GWT.log
不起作用。有没有人有任何想法?
答案 0 :(得分:71)
引用文档:
添加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");
答案 1 :(得分:43)
我需要在通过PhoneGap(和gwt-phonegap)部署到Android设备/模拟器的GWT应用程序的上下文中执行此操作。 System.out.println()和上面的GWT日志记录(带模块声明)都没有出现在Android的logcat中,所以我使用了一个简单的JSNI包装器来访问console.log:
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 );
}-*/;
答案 2 :(得分:24)
在GWT版本2.6.0中,方法GWT.log将消息写入浏览器控制台,您不需要编写本机方法。
答案 3 :(得分:21)
要登录浏览器控制台,您可以使用本机以非常简单的方式执行此操作。非常有用的调试。
如果您添加如下所示的本机方法,您可以从您想要的位置向其发送字符串,并将其记录在浏览器控制台中。
public static native void console(String text)
/*-{
console.log(text);
}-*/;
有关在GWT中使用native的更多信息: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
答案 4 :(得分:6)
在一个片段中总结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);
答案 5 :(得分:5)
另一种使用本机控制台的变体...
添加此课程:
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!");
答案 6 :(得分:0)
我也有这个问题。 GWT日志有效但因为它全部转换为javascript,它会打印到客户端输出,所以只需查看浏览器的控制台即可。在Google Chrome中,点击右上角的三行自定义按钮,点击工具 - &gt;开发者工具,然后会弹出控制台。您广受欢迎的陈述将在那里。此外,Ctrl + Shift + I是提示它的快捷方式。如果你想打印到服务器,我相信记录器处理程序等是有序的吗?
答案 7 :(得分:0)
第一个答案中的文档网址已经提供了不同的配置选项来登录到不同的地方。 我写的这个框架为您提供了一个有用的api,并允许您选择服务器端日志记录实现。 看一看 : https://code.google.com/p/gwt-usefull-logging/
答案 8 :(得分:0)
我建议您使用GWT Developer mode它会增加一些开销,导致代码服务器上的自动编译和代码分配,但是当您的应用程序的客户端出现一些异常时,这一点非常清楚。我的意思是,有些时候chrome控制台(或者firebug或任何浏览器调试内置工具)在这些情况下并没有说太多,相信我,当你试图弄清楚发生了什么时,发现NullPointerException是一个痛苦的问题。通过警告您的代码。
答案 9 :(得分:0)
要打印到浏览器控制台,我使用的是这样的东西:
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
});
}
}-*/;
}
答案 10 :(得分:0)
你可以把 alaert.Alert("");在您的 gwt 代码中编译并运行它,当您发出请求或在放置该警报的操作时,您将在浏览器上弹出