logger.setUseParentHandlers(false);
for (Handler handler : logger.getHandlers()) {
logger.removeHandler(handler);
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
StreamHandler handler = new StreamHandler(baos, new Formatter() {
private String lineSeparator = System.getProperty("line.separator", "\n");
@Override
public synchronized String format(LogRecord record) {
StringBuilder buf = new StringBuilder();
String msg = formatMessage(record);
buf.append(record.getLevel().getName()).append(": ").append(msg).append(lineSeparator);
if (record.getThrown() != null) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
record.getThrown().printStackTrace(pw);
pw.close();
buf.append(sw.toString());
}
return buf.toString();
}
});
logger.addHandler(handler);
// log some things
GWT.log("msg1");
Throwable t = new RuntimeException("foo");
t.fillInStackTrace();
GWT.log("msg2", t);
handler.flush();
// check what we logged
BufferedReader reader = new BufferedReader(new InputStreamReader(
new ByteArrayInputStream(baos.toByteArray())));
assertEquals("INFO: msg1", reader.readLine());