Настройка каротажа GWT

Я использую GWT 2.1 java.util.logging эмуляция для регистрации сообщений на стороне клиента. Согласно документу, предоставляются два форматирования (TextFormatter и HTMLFormatter), которые подходят для ведения журналов на стороне клиента.

Может ли кто-нибудь указать пример настройки форматирования и привязать его к обработчику в GWT?

Спасибо

Ответ 1

Вот простой пример добавления обработчика журнала в корневой журнал. Регистратор использует HTMLLogFormatter и помещает это сообщение в HTML-виджет.

HTML html = new HTML();
// add the html widget somewhere in your code.
Logger.getLogger("").addHandler(new Handler() {
  {
    // set the formatter, in this case HtmlLogFormatter
    setFormatter(new HtmlLogFormatter(true));
    setLevel(Level.ALL);
  }

  @Override
  public void publish(LogRecord record) {
    if (!isLoggable(record)) {
      Formatter formatter = getFormatter();
      String msg = formatter.format(record);

      html.setHTML(msg);
    }
  }
});

Также посмотрите HasWidgetsLogHandler, что в основном делает то, что делает обработчик в примере выше.

Ответ 2

Смотрите документацию GWT для регистрации здесь. Это действительно зависит от того, где вы хотите, чтобы ваш журнал появился, но если вы заботитесь только о регистрации в режиме Dev, вам нужен только SystemLogHandler и DevelopmentModeLogHandler. ConsoleLogHandler и FirebugLogHandler используются для ведения журналов в режиме веб-браузера на хром, firebug и firebug lite. PopupLogHandler и HasWidgetsLogHandler добавляют сообщения журнала к некоторому элементу пользовательского интерфейса. Все вышеперечисленное должно быть включено/отключено в .gwt.xml, кроме HasWidgetsLogHandler, для которого требуется связанный контейнер виджетов. Это должно быть возможно, добавив следующее:

<inherits name="com.google.gwt.logging.Logging"/>
<set-property name="gwt.logging.logLevel" value="SEVERE"/> # To change the default logLevel
<set-property name="gwt.logging.enabled" value="FALSE"/> # To disable logging
<set-property name="gwt.logging.consoleHandler" value="DISABLED"/>  # To disable a default Handler
<set-property name="gwt.logging.developmentModeHandler" value="DISABLED" />
<set-property name="gwt.logging.popupHandler" value="DISABLED" />
<set-property name="gwt.logging.systemHandler" value="DISABLED" />
<set-property name="gwt.logging.firebugHandler" value="DISABLED" />
<set-property name="gwt.logging.simpleRemoteHandler" value="ENABLED" />
etc...

Ответ 3

Вот два класса, в которых я закончил:

import java.util.Date;
import java.util.logging.LogRecord;

import com.google.gwt.logging.impl.FormatterImpl;

public class LogFormatter extends FormatterImpl {

private static final StringBuilder sb = new StringBuilder();

@Override
public String format(LogRecord rec) {
    synchronized (sb) {
        sb.setLength(0);
        sb.append(new Date(rec.getMillis()).toString());
        sb.append(": ");
        sb.append(rec.getMessage());
        sb.append("\n");
        return sb.toString();
    }
}

}

import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ALog {
/* IMPORTANT: User blank string (root logger) here or else it WILL NOT have the    formatter being used */
private static final Logger logger = Logger.getLogger("");

static {
    for (Handler handler : logger.getHandlers()) {
        handler.setFormatter(new LogFormatter());
        handler.setLevel(Level.ALL);
    }
}

public static void log(String msg) {
    logger.log(Level.INFO, msg);
}

public static void log(String msg, Throwable e) {
    logger.log(Level.INFO, msg, e);
}
}