GWT日志设置

时间:2011-01-26 12:01:37

标签: gwt logging

我正在使用GWT 2.1 java.util.logging emulation来记录客户端消息。根据该文档,提供了两个格式化程序(TextFormatter和HTMLFormatter),它们适用于客户端日志记录。

有人可以提供一个关于如何设置格式化程序并将其附加到GWT中的处理程序的示例吗?

由于

3 个答案:

答案 0 :(得分:17)

有关记录here的信息,请参阅GWT文档。它实际上取决于您希望日志记录显示的位置,但如果您只关心以Dev模式登录,那么您只需要SystemLogHandler和DevelopmentModeLogHandler。 ConsoleLogHandler和FirebugLogHandler用于web模式记录到chrome,firebug和firebug lite。 PopupLogHandler和HasWidgetsLogHandler将日志消息添加到某种UI元素。除了需要关联的小部件容器的HasWidgetsLogHandler之外,所有上述内容都应该能够在.gwt.xml中启用/禁用。这可以通过添加以下内容来实现:

<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...

答案 1 :(得分:9)

以下是向Root记录器添加Log处理程序的简单示例。记录器使用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 :(得分:4)

以下是我最终使用的两个课程:

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);
}
}