@Override
public String format(LogRecord r) {
long time = r.getMillis();
String date = MessageFormat.format("{0, date} {0, time}", new Object[]{new Date(time)});
String nl = System.lineSeparator();
StringBuilder sb = new StringBuilder();
sb.append("<record>").append(nl);
append(sb, 1, "date", date);
append(sb, 1, "millis", time);
append(sb, 1, "sequence", r.getSequenceNumber());
if (r.getLoggerName() != null) append(sb, 1, "logger", r.getLoggerName());
append(sb, 1, "level", r.getLevel().getName());
if (r.getSourceClassName() != null) append(sb, 1, "class", r.getSourceClassName());
if (r.getSourceMethodName() != null) append(sb, 1, "method", r.getSourceMethodName());
append(sb, 1, "thread", r.getThreadID());
formatMessages(r, sb);
Object[] params = r.getParameters();
if (params != null) for (Object element : params) append(sb, 1, "param", element);
formatThrowable(r, sb);
sb.append("</record>").append(nl);
return sb.toString();
}