Настройка каротажа 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);
}
}