GWT日志记录设置

GWT日志记录设置,gwt,logging,Gwt,Logging,我使用GWT2.1java.util.logging来记录客户端消息。根据文档,提供了两个适用于客户端日志记录的格式化程序(TextFormatter和HTMLFormatter) 有人能提供一个关于如何在GWT中设置格式化程序并将其附加到处理程序的示例吗 感谢下面是一个向根日志记录器添加日志处理程序的简单示例。记录器使用HTMLLogFormatter并将消息放入HTML小部件中 HTML html = new HTML(); // add the html widget somewhere

我使用GWT2.1java.util.logging来记录客户端消息。根据文档,提供了两个适用于客户端日志记录的格式化程序(TextFormatter和HTMLFormatter)

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


感谢

下面是一个向根日志记录器添加日志处理程序的简单示例。记录器使用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,它基本上完成了上面示例中的处理程序所做的工作。

有关日志记录,请参阅GWT文档。这实际上取决于您希望日志显示的位置,但是如果您只关心在Dev模式下的日志,那么您只需要SystemLogHandler和DevelopmentModelLogHandler。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...

#更改默认日志级别的步骤
#禁用日志记录
#禁用默认处理程序的步骤
等

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

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


谢谢你,希尔布兰德。您知道是否可以使用gwt.xml文件中的属性执行相同的设置吗?您的意思是当在gwt.xml文件中禁用日志记录时,在编译gwt时不会生成日志记录代码?我的意思是通过属性配置日志记录,而不是通过编程方式。可以通过属性启用/禁用标准日志记录程序(这就是曼恩78在回答中列出的清单),但仅此而已。如果您想要自定义格式化程序,则需要按我的回答中所示的方式以编程方式添加该处理程序。由于使用相同名称遍历所有类花费了很长时间,因此这似乎是以下内容的导入语句:
import java.util.logging.formatter;import java.util.logging.handler;import java.util.logging.Level;import java.util.logging.Levelrt java.util.logging.LogRecord;import java.util.logging.Logger;import com.google.gwt.user.client.ui.HTML;import com.google.gwt.logging.client.htmlogformatter;
。您还需要为创建的匿名处理程序(未显示)实现
close()
flush()
。您根本没有解决或回答这个问题,而是从官方文档中复制粘贴的基本设置,任何人都可以找到。需要注意的是,对这些属性的更改需要重新启动SuperDev模式。我不同意,@mP。这确实解决了这个问题,从官方文档中复制/粘贴内容比提供一个只提供链接的答案。你能看一下吗?
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);
}
}