Answers:
引用文档:
就像下面的代码示例一样,添加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中,因此我将一个简单的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 );
}-*/;
在GWT 2.6.0版中,方法GWT.log将消息写入浏览器控制台,而无需编写本机方法。
要登录到浏览器控制台,您可以使用本机以非常简单的方式进行。在调试中非常有帮助。
如果您添加如下所示的本机方法,则可以从所需位置向其发送字符串,并将其记录在浏览器控制台中。
public static native void console(String text)
/*-{
console.log(text);
}-*/;
有关在GWT中使用本机的详细信息:http : //www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
只需总结一下mreppy和Strelok答案中显示的不同可能性。我还为IE异常添加了一种可能的解决方法,如下所述:为什么JavaScript仅在IE中打开开发人员工具一次后才能工作?
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!");
我也有这个问题。GWT日志可以工作,但是由于所有日志都已转换为javascript,因此会打印到客户端输出,因此只需查看浏览器的控制台即可。在Google Chrome浏览器中,单击右上角的三行“自定义”按钮,然后单击“工具”->“开发人员工具”,然后会弹出控制台。您的追捧声明将在那里。同样,Ctrl + Shift + I是启动它的快捷方式。如果要打印到服务器,我相信记录程序处理程序和命令是否正确?
第一个答案中的文档URL已经提供了不同的配置选项以登录到不同的位置。我编写的该框架为您提供了有用的api,并允许您选择服务器端日志记录实现。看看:https : //code.google.com/p/gwt-usefull-logging/
我建议您使用GWT Developer模式。这会增加一些开销,从而导致代码服务器上的自动编译和代码分配,但是当您的应用程序客户端出现某些异常时,这很清楚。我的意思是,有时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
});
}
}-*/;
}