【问题标题】:GWT logging setupGWT 日志记录设置
【发布时间】:2011-01-26 12:01:36
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: gwt logging


    【解决方案1】:

    请参阅 GWT 文档以记录 here。这实际上取决于您希望日志显示在哪里,但是如果您只关心在 Dev 模式下进行日志记录,那么您只需要 SystemLogHandler 和 DevelopmentModeLogHandler。 ConsoleLogHandler 和 FirebugLogHandler 用于 Web 模式日志记录到 chrome、firebug 和 firebug lite。 PopupLogHandler 和 HasWidgetsLogHandler 将日志消息添加到某种 UI 元素。以上所有内容都应该能够在 .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...
    

    【讨论】:

    • 您根本没有解决或回答问题,而是从官方文档中复制粘贴以进行任何人都可以找到的基本设置。
    • 请务必注意,更改这些属性需要重新启动 SuperDev 模式。
    • 我不同意,@mP。这确实解决了这个问题,并且从官方文档中复制/粘贴内容比提供仅链接的答案要好得多。
    • 你能看看this question吗?
    【解决方案2】:

    这是一个将日志处理程序添加到根记录器的简单示例。记录器使用 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.xml 文件中的属性进行相同的设置?
    • 您的意思是当您的 gwt.xml 文件中禁用日志记录时,编译 gwt 时不会生成日志记录代码?
    • 我的意思是通过属性配置日志记录,而不是通过编程来实现
    • 标准记录器可以通过属性启用/禁用(这是lineman78在他的回答中的列表),但仅此而已。如果您想要自定义格式化程序,则需要以编程方式添加处理程序,如我的回答所示。
    • 由于花了很长时间遍历所有具有相同名称的类,看来这是为此的导入语句:import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.logging.client.HtmlLogFormatter;。您还需要为由此创建的匿名处理程序实现close()flush()(未显示)。
    【解决方案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);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 1970-01-01
      • 2016-11-27
      • 2023-03-23
      • 1970-01-01
      • 2014-03-06
      • 2020-11-13
      • 2011-07-23
      • 2012-09-24
      相关资源
      最近更新 更多