如何在GWT中打印到控制台

89 gwt

我正在调试一个GWT应用程序,我需要将一些东西打印到控制台进行测试.System.out.println并且GWT.log不工作.有没有人有任何想法?

Str*_*lok 75

引用文档:

添加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");
Run Code Online (Sandbox Code Playgroud)

  • 是的,GWT.log仅适用于DevMode,因此如果您使用GWT编译器编译代码,您将永远不会看到GWT.log()的任何输出. (11认同)
  • @Andrew Ooops.你确实是对的.这个答案已经很久了,我已经忘了它了:) GWT.log确实*不能在Web模式下工作. (2认同)
  • 您使用的Logger类导入是什么?这真令人沮丧. (2认同)

小智 45

我需要在通过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 );
  }-*/;
Run Code Online (Sandbox Code Playgroud)


zer*_*ood 26

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


erk*_*ldz 22

要记录到浏览器控制台,您可以使用本机以非常简单的方式执行此操作.非常有用的调试.

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

public static native void console(String text)
/*-{
    console.log(text);
}-*/;
Run Code Online (Sandbox Code Playgroud)

有关在GWT中使用native的更多信息:http: //www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html


sch*_*rer 6

只是在一个片段中总结了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);
Run Code Online (Sandbox Code Playgroud)


Buv*_*inJ 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 ); }-*/;
}
Run Code Online (Sandbox Code Playgroud)

然后,在某些时候启用调试,就像启动应用程序一样:

public class XXXXXX implements EntryPoint {
    @Override
    public void onModuleLoad() {
        Debug.enable();
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后就像这样使用它:

Debug.log("Hello World!");
Run Code Online (Sandbox Code Playgroud)