Я отлаживаю приложение GWT, и мне нужно распечатать некоторые материалы на консоли для тестирования. System.out.println и GWT.log не работают. У кого-нибудь есть идеи?
Как печатать на консоли в GWT
Ответ 1
Указание документации:
Добавление журнала 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 = Logger.getLogger("NameOfYourLogger");
logger.log(Level.SEVERE, "this message should get logged");
		Ответ 2
Мне нужно было сделать это в контексте приложения GWT, которое было развернуто на устройстве/эмуляторе Android через PhoneGap (и gwt-phonegap). Ни System.out.println(), ни регистрация GWT, как указано выше (с объявлением модуля), не появлялись в логарифмическом режиме Android, поэтому я применил простой 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 );
  }-*/;
		Ответ 3
В GWT версии 2.6.0 метод GWT.log записывает сообщение в консоль браузера, вам не нужно писать собственные методы.
Ответ 4
Чтобы войти в консоль браузеров, вы можете сделать это с помощью native, очень простым способом. Очень полезно при отладке.
Если вы добавите собственный метод, как показано ниже, вы можете отправить строку туда, где хотите, и он будет записывать его в консоль браузеров.
public static native void console(String text)
/*-{
    console.log(text);
}-*/;
Дополнительные сведения об использовании native в GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
Ответ 5
Просто подытожим различные возможности, показанные в ответе 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);
		Ответ 6
Еще одно изменение, использующее встроенную консоль...
Добавьте этот класс:
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!");
		Ответ 7
У меня тоже была эта проблема. Журнал GWT работает, но поскольку он все преобразован в javascript, он печатает на выходе клиента, поэтому просто просмотрите консоль своего браузера, и они будут там. В Google Chrome нажмите кнопку "Настроить трехстрочную линию" в правом верхнем углу, нажмите "Инструменты" → "Инструменты разработчика", и консоль появится. Ваши заявленные заявления будут там. Кроме того, Ctrl + Shift + я - это ярлык, который вызывает его. Если вы хотите печатать на сервере, я считаю, что обработчики журналов и т.д. В порядке?
Ответ 8
В URL-адресе документации в первом ответе уже указан другой параметр конфигурации для входа в разные места. Эта структура, которую я написал, предлагает вам полезный api и позволяет вам выбирать реализацию протоколирования на стороне сервера. Взгляни: https://code.google.com/p/gwt-usefull-logging/
Ответ 9
Я предлагаю вам использовать режим GWT Developer. Он добавляет немного накладных расходов, что автоматическая компиляция и выделение кода на сервере кода, но это довольно когда некоторые исключения возникают на клиентской стороне вашего приложения. Я имею в виду, что хром-консоль (или firebug или любой другой встроенный инструмент отладки браузера) не говорит слишком много в таких ситуациях, поверьте мне, найти NullPointerException - это боль в шее, когда вы пытаетесь выяснить, что происходит путем предупреждения вашего кода.
Ответ 10
Для печати в консоли браузера я использую что-то вроде этого:
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
        });
    }
}-*/;
}