我正在使用GWT 2.1 java.util.logging emulation来记录客户端消息。根据该文档,提供了两个格式化程序(TextFormatter和HTMLFormatter),它们适用于客户端日志记录。
有人可以提供一个关于如何设置格式化程序并将其附加到GWT中的处理程序的示例吗?
由于
答案 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);
}
}