2011-01-26 195 views
10

我正在使用GWT 2.1 java.util.logging emulation來記錄客戶端消息。根據文檔,提供了兩個適用於客戶端日誌記錄的格式器(TextFormatter和HTMLFormatter)。GWT日誌記錄設置

任何人都可以提供一個關於如何設置格式化程序並將其附加到GWT中的處理程序的例子嗎?

謝謝

回答

9

這裏是一個簡單的例子,添加日誌處理程序的根記錄器。記錄器使用HTMLLogFormatter並將消息放入HTML小部件中。

也看看HasWidgetsLogHandler,基本上做什麼上面的例子中的處理程序。

+0

感謝Hilbrand。你知道是否可以使用gwt.xml文件中的屬性進行相同的設置? – 2011-01-26 17:24:20

+0

您的意思是在gwt.xml文件中禁用日誌記錄時,編譯gwt時不會生成日誌記錄代碼? – 2011-01-26 17:39:23

17

查看用於記錄日誌的GWT文檔here。這實際上取決於你希望日誌出現在哪裏,但是如果你只關心登錄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... 
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); 
} 
}