user1167575
user1167575

Reputation:

How to print to the console in GWT

I am debugging a GWT application and I need to print some stuff to the console for testing purposes. System.out.println and GWT.log don't work. Does anyone have any ideas?

Upvotes: 100

Views: 84523

Answers (11)

faizan9689
faizan9689

Reputation: 21

You can put alaert.Alert(""); in your gwt code compile it and run it you will get pop up on browser when you make request or at the action where you have placed that alert

Upvotes: 0

Strelok
Strelok

Reputation: 51441

Quoting the documentation:

Adding GWT logging is really quite simple, as simple as the following code example. However — understanding how logging works, and how to correctly configure it is important, so please do take the time to read the rest of this document.

http://code.google.com/webtoolkit/doc/latest/DevGuideLogging.html

The simplest way to enable logging is:

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

Upvotes: 80

BuvinJ
BuvinJ

Reputation: 11048

Yet another variation using the native console...

Add this class:

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 ); }-*/;
}

Then, enable debugging with it at some point, like upon starting the app:

public class XXXXXX implements EntryPoint {
    @Override
    public void onModuleLoad() {
        Debug.enable();
        ...
    }
}

Then just use it like so:

Debug.log("Hello World!");

Upvotes: 6

Ievgen Derevianko
Ievgen Derevianko

Reputation: 11

For printing to the browser console I am using something like this:

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
        });
    }
}-*/;
}

Upvotes: 0

mreppy
mreppy

Reputation: 667

I needed to do this in the context of a GWT application that was deployed to an Android device/emulator via PhoneGap (and gwt-phonegap). Neither System.out.println() nor GWT logging as above (with module declaration) showed up in Android's logcat, so I resorted to a simple JSNI wrapper to 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 );
  }-*/;

Upvotes: 51

erkinyldz
erkinyldz

Reputation: 688

To log to browsers console you can do it using native, in a very simple way. Very helpful in debugging.

If you add a native method like in below, you can send a string to it from where you want and it will log it in the browsers console.

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

For more information about using native in GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html

Upvotes: 30

schnatterer
schnatterer

Reputation: 7859

Just summing up the different possibilities shown in the answer's of mreppy and Strelok in one snippet. I also added one possible workaround for IE exceptions as described here: 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);

Upvotes: 7

zergood
zergood

Reputation: 711

In GWT version 2.6.0, method GWT.log writes message to browser console, you don't need to write native methods.

Upvotes: 28

user743489
user743489

Reputation:

I suggest you use GWT Developer mode It adds a little overhead cause the automatic compilation and code-allocating on the code server, but it's pretty clear when some exceptions arises in client side of your application. I mean, some times chrome console (or firebug or whatever browser debugging built-in tool) doesn't say too much in those situations, trust me, finding a NullPointerException is a pain in the neck when you try to figure out what is happening by alerting your code.

Upvotes: 0

Fran&#231;ois Wauquier
Fran&#231;ois Wauquier

Reputation: 568

The documentation url in the first answer already gives the different configuration option to log to different places. This framework i wrote offers you a usefull api and allows you to choose your server-side logging implementation. Have a look : https://code.google.com/p/gwt-usefull-logging/

Upvotes: 0

Glenninator
Glenninator

Reputation: 47

I had this problem as well. The GWT log works but because it's all converted to javascript, it prints to the client output, so just view your browser's console and they will be there. In Google Chrome click the triple-line Customize button in the top right, click Tools-->Developer tools and the console will pop up. Your sought-after statements will be there. Also, Ctrl+Shift+I is the shortcut that brings it up. If you want to print to the server, I believe logger handlers and such are in order?

Upvotes: 1

Related Questions