Як надрукувати на консолі в GWT


92

Я налагоджую програму GWT, і мені потрібно надрукувати кілька матеріалів на консолі для тестування. System.out.printlnі GWT.logне працюють. Хтось має ідеї?


1
Спробуйте відповіді , розміщені тут: stackoverflow.com/questions/17463928 / ...
Chepech

Відповіді:


76

Цитування документації:

Додавання реєстрації 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");

1
Я думаю, що коментар щодо GWT.log не працює, тому вас проголосували проти.
каси

11
Так, GWT.log працює лише в DevMode, тому, якщо ви компілюєте свій код за допомогою компілятора GWT, ви ніколи не побачите вихідних даних з GWT.log ().
Ендрю Маккензі,

2
@Andrew Ooops. Ви справді правильні. Минуло стільки часу з цієї відповіді, що я вже про це все забув :) GWT.log не працює у веб-режимі.
Strelok

1
Через цю помилку це може не спрацювати в реєстраторі консолі IE . Вони кажуть, що це виправлено у GWT 2.6.
Brad Cupit

2
Що таке імпорт класу Logger, який ви використовували? Це справді засмучує.
CrazySabbath

50

Мені потрібно було зробити це в контексті програми 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 );
  }-*/;

Для всіх користувачів IE: Для того , щоб виключення УНИКНУТИ коли кошти розробки не відкриваються краще обернути виклик в спробі зловити блок або використовуйте одне з рішень зазначеної тут: stackoverflow.com/q/7742781/1845976
schnatterer

Не могли б ви поглянути на це питання ?
displayname

27

У версії GWT 2.6.0 метод GWT.log записує повідомлення на консоль браузера, вам не потрібно писати власні методи.


1
Я сподівався, що це спрацює. Я додав GWT.log ("Легко знайти"), а потім шукав у всьому проекті рядок "Легко знайти". Це було лише в моєму джерелі. Я перевірив документи GWT. Там сказано, що "GWT.log" призначений лише для режиму розробника у вікні розробника. gwtproject.org/doc/latest/DevGuideLogging.html
ChrisCantrell

Ні, GWT.log призначений лише для режиму DEV / SUPERDEV, але не для виробничого використання (його вирізає компілятор GWT).
Володимир Шмідт

24

Щоб увійти в консоль браузера, ви можете зробити це, використовуючи рідну, дуже простим способом. Дуже корисний при налагодженні.

Якщо ви додасте власний метод, як показано нижче, ви можете надіслати йому рядок звідки завгодно, і він зареєструє його на консолі браузера.

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

Для отримання додаткової інформації про використання рідної мови в GWT: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html


Крім того, замість того, щоб надавати параметр як String, ви можете вказати йому щось інше (приклад: JavaScriptObject) і втілити це.
erkinyldz

7

Просто підсумовуючи різні можливості , показані у відповідь років 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

Ще одна варіація використання рідної консолі ...

Додайте цей клас:

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

У мене була така проблема. Журнал GWT працює, але оскільки все це перетворено на javascript, воно друкується на висновку клієнта, тому просто перегляньте консоль браузера, і вони будуть там. У Google Chrome натисніть тристоронній кнопку Налаштування у верхньому правому куті, натисніть Інструменти -> Інструменти розробника, і консоль з’явиться. Ваші шукані заяви будуть там. Крім того, Ctrl + Shift + I - це ярлик, який викликає його. Якщо ви хочете надрукувати на сервері, я вважаю, що обробники реєстраторів і такі в порядку?


0

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


0

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


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
        });
    }
}-*/;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.