如何在GWT中打印到控制台


Answers:


76

引用文档:

就像下面的代码示例一样,添加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
我认为有关GWT.log的评论不起作用是您被否决的原因。
Checketts'2

11
是的,GWT.log仅在DevMode下工作,因此,如果使用GWT编译器编译代码,则永远不会看到GWT.log()的任何输出。
安德鲁·麦肯齐

2
@Andrew哎呀。你确实是对的。它已经这么长时间,因为这个答案,我已经全忘了:) GWT.log并没有在网络模式下工作。
Strelok,2012年

1
由于此错误,这可能在IE的控制台记录器中不起作用。他们说虽然在GWT 2.6中已修复。
布拉德·库比

2
您使用的Logger类导入是什么?这真令人沮丧。
CrazySabbath

49

我需要在通过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 );
  }-*/;

对于所有IE用户:为了避免在未打开开发工具时出现异常,您最好将调用包装在try catch块中,或使用此处所述的解决方案之一: stackoverflow.com/q/7742781/1845976
schnatterer

你能看一下这个问题吗?
displayname

27

在GWT 2.6.0版中,方法GWT.log将消息写入浏览器控制台,而无需编写本机方法。


1
我希望这能奏效。我添加了一个GWT.log(“ Easy to find”),然后在整个项目中搜索字符串“ Easy to find”。这只是我的资料。我检查了GWT文档。它说“ GWT.log”仅用于开发窗口中的开发模式。gwtproject.org/doc/latest/DevGuideLogging.html
ChrisCantrell

不,GWT.log仅用于DEV / SUPERDEV模式,不适用于生产(它将由GWT的编译器删除)。
弗拉基米尔·施密特

24

要登录到浏览器控制台,您可以使用本机以非常简单的方式进行。在调试中非常有帮助。

如果您添加如下所示的本机方法,则可以从所需位置向其发送字符串,并将其记录在浏览器控制台中。

public static native void console(String text)
/*-{
    console.log(text);
}-*/;

有关在GWT中使用本机的详细信息:http : //www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html


另外,除了提供参数String之外,还可以提供其他名称(例如:JavaScriptObject)并进行控制台。
erkinyldz 2014年

7

只需总结一下mreppyStrelok答案中显示的不同可能性。我还为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);

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!");

0

我也有这个问题。GWT日志可以工作,但是由于所有日志都已转换为javascript,因此会打印到客户端输出,因此只需查看浏览器的控制台即可。在Google Chrome浏览器中,单击右上角的三行“自定义”按钮,然后单击“工具”->“开发人员工具”,然后会弹出控制台。您的追捧声明将在那里。同样,Ctrl + Shift + I是启动它的快捷方式。如果要打印到服务器,我相信记录程序处理程序和命令是否正确?



0

我建议您使用GWT Developer模式。这会增加一些开销,从而导致代码服务器上的自动编译和代码分配,但是当您的应用程序客户端出现某些异常时,这很清楚。我的意思是,有时chrome控制台(或Firebug或其他浏览器调试内置工具)在那种情况下说的不多,相信我,当您尝试弄清正在发生的事情时,找到一个NullPointerException是一件令人头疼的事通过提醒您的代码。


0

为了打印到浏览器控制台,我使用了以下方法:

EventLogger.java

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
        });
    }
}-*/;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.