Как печатать на консоль в GWT - PullRequest
88 голосов
/ 12 февраля 2012

Я отлаживаю приложение GWT, и мне нужно распечатать некоторые материалы на консоли для тестирования. System.out.println и GWT.log не работают. У кого-нибудь есть идеи?

Ответы [ 10 ]

72 голосов
/ 12 февраля 2012

Цитирование документации:

Добавление регистрации в 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");
45 голосов
/ 11 октября 2012

Мне нужно было сделать это в контексте приложения GWT, которое было развернуто на устройстве / эмуляторе Android через PhoneGap (и gwt-phonegap).Ни логирование System.out.println (), ни ведение журнала GWT, как указано выше (с объявлением модуля), не обнаружилось в logcat 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 );
  }-*/;
25 голосов
/ 12 февраля 2014

В GWT версии 2.6.0 метод GWT.log записывает сообщение в консоль браузера, вам не нужно писать собственные методы.

21 голосов
/ 16 января 2014

Чтобы войти в консоль браузера, вы можете сделать это, используя native, очень простым способом.Очень полезно при отладке.

Если вы добавите собственный метод, как показано ниже, вы можете отправить ему строку, откуда вы хотите, и она зарегистрирует ее в консоли браузера.

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

Для получения дополнительной информации об использовании native в GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html

6 голосов
/ 07 июля 2014

Просто суммируя различные возможности, показанные в ответах mreppy и Стрелок в одном фрагменте.Я также добавил один возможный обходной путь для исключений 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 голосов
/ 14 октября 2015

Еще один вариант с использованием родной консоли ...

Добавить этот класс:

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 голосов
/ 13 ноября 2013

Для печати на консоли браузера я использую что-то вроде этого:

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
        });
    }
}-*/;
}
0 голосов
/ 13 сентября 2013

Я предлагаю вам использовать Режим разработчика GWT Это добавляет немного накладных расходов, поскольку приводит к автоматической компиляции и распределению кода на сервере кода, но довольно ясно, когда возникают некоторые исключения на стороне клиента вашего приложения. Я имею в виду, что иногда консоль chrome (или firebug, или любой другой встроенный инструмент отладки браузера) не говорит слишком много в таких ситуациях, поверьте мне, обнаружение исключения NullPointerException - боль в шее, когда вы пытаетесь выяснить, что происходит предупредив ваш код.

0 голосов
/ 08 июля 2013

URL-адрес документации в первом ответе уже дает другой вариант конфигурации для входа в разные места.Этот фреймворк, который я написал, предлагает вам полезный API и позволяет вам выбрать реализацию ведения журнала на стороне сервера.Посмотрите: https://code.google.com/p/gwt-usefull-logging/

0 голосов
/ 03 июля 2013

У меня тоже была эта проблема.Журнал GWT работает, но поскольку он полностью преобразован в javascript, он печатает на вывод клиента, поэтому просто просмотрите консоль вашего браузера, и они будут там.В Google Chrome нажмите на трехстрочную кнопку «Настройка» в правом верхнем углу, выберите «Инструменты» -> «Инструменты разработчика», и откроется консоль.Ваши востребованные заявления будут там.Кроме того, Ctrl + Shift + I является ярлыком, который вызывает его.Если вы хотите печатать на сервер, я полагаю, что обработчики логгеров и так в порядке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...