Как печатать на консоль в GWT
Я отлаживаю приложение GWT, и мне нужно распечатать некоторые вещи на консоль для целей тестирования. System.out.println
и GWT.log
не работают. У кого-нибудь есть идеи?
10 ответов:
цитирую документацию:
добавление журнала 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");
Мне нужно было сделать это в контексте приложения GWT, которое было развернуто на Android-устройстве/эмуляторе через PhoneGap (и gwt-phonegap). Ни Системы.из.println () и GWT logging, как указано выше (с объявлением модуля), появились в logcat Android, поэтому я прибегнул к простой оболочке JSNI для консоли.журнал:
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 ); }-*/;
в GWT версии 2.6.0, метод GWT.журнал записывает сообщение в консоль браузера, вам не нужно писать собственные методы.
чтобы войти в консоль браузеров, вы можете сделать это с помощью native, очень простым способом. Очень полезно в отладке.
Если вы добавите собственный метод, как показано ниже, вы можете отправить ему строку оттуда, где вы хотите, и он зарегистрирует ее в консоли браузеров.
public static native void console(String text) /*-{ console.log(text); }-*/;
для получения дополнительной информации об использовании native в GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
просто суммируя различные возможности, показанные в ответе 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);
еще один вариант использования родной консоли...
добавить этот класс:
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!");
У меня тоже была эта проблема. Журнал GWT работает, но поскольку он все преобразован в javascript, он печатает на выходе клиента, поэтому просто просмотрите консоль вашего браузера, и они будут там. В Google Chrome нажмите на трипл-лайн кнопку Настройка в правом верхнем углу нажмите инструменты - >Инструменты разработчика и консоль появится. Ваши востребованные заявления будут там. Кроме того, Ctrl+Shift+I-это ярлык, который вызывает его. Если вы хотите печатать на сервере, я считаю, что обработчики логгеров и такие в порядке?
url документации в первом ответе уже дает другой параметр конфигурации для входа в разные места. Эта структура, которую я написал, предлагает вам полезный api и позволяет вам выбрать реализацию ведения журнала на стороне сервера. Взглянуть : https://code.google.com/p/gwt-usefull-logging/
Я предлагаю вам использовать режим разработчика GWT это добавляет немного накладных расходов вызвать автоматическую компиляцию и выделение кода на сервере кода, но это довольно ясно, когда некоторые исключения возникают на стороне клиента вашего приложения. Я имею в виду, что иногда консоль chrome (или firebug или любой другой встроенный инструмент отладки браузера) не говорит слишком много в таких ситуациях, поверьте мне, Поиск исключения NullPointerException-это боль в шее, когда вы пытаетесь выяснить, что происходит оповещение вашего кода.
для печати в консоли браузера я использую что-то вроде этого:
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 }); } }-*/; }