Как печатать на консоль в GWT

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

gwt
84 голоса | спросил user1167575 12 FebruaryEurope/MoscowbSun, 12 Feb 2012 12:22:43 +0400000000pmSun, 12 Feb 2012 12:22:43 +040012 2012, 12:22:43

10 ответов


0

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

  

Добавление журналирования 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");
ответил Strelok 12 FebruaryEurope/MoscowbSun, 12 Feb 2012 13:34:02 +0400000000pmSun, 12 Feb 2012 13:34:02 +040012 2012, 13:34:02
0

Мне нужно было сделать это в контексте приложения 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 );
  }-*/;
ответил mreppy 11 +04002012-10-11T20:22:45+04:00312012bEurope/MoscowThu, 11 Oct 2012 20:22:45 +0400 2012, 20:22:45
0

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

ответил zergood 12 FebruaryEurope/MoscowbWed, 12 Feb 2014 12:44:57 +0400000000pmWed, 12 Feb 2014 12:44:57 +040014 2014, 12:44:57
0

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

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

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

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

ответил erkinyldz 16 Jpm1000000pmThu, 16 Jan 2014 13:49:33 +040014 2014, 13:49:33
0

Просто суммируя различные возможности, показанные в ответах 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);
ответил schnatterer 7 J000000Monday14 2014, 19:30:53
0

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

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

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!");
ответил BuvinJ 14 +03002015-10-14T17:15:32+03:00312015bEurope/MoscowWed, 14 Oct 2015 17:15:32 +0300 2015, 17:15:32
0

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

ответил Glenninator 3 J000000Wednesday13 2013, 22:12:18
0

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

ответил François Wauquier 8 J000000Monday13 2013, 16:55:44
0

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

ответил 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 13 Sep 2013 23:13:48 +0400 2013, 23:13:48
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
        });
    }
}-*/;
}
ответил Eugene 13 32013vEurope/Moscow11bEurope/MoscowWed, 13 Nov 2013 03:12:10 +0400 2013, 03:12:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132