package org.openntf.domino.logging; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; import java.util.logging.Formatter; import java.util.logging.Level; import java.util.logging.LogRecord; import org.openntf.domino.exceptions.OpenNTFNotesException; public class LogFormatterFileDefault extends Formatter { public static LogFormatterFileDefault getInstance() { return new LogFormatterFileDefault(); } /* * (non-Javadoc) * * @see java.util.logging.Formatter#format(java.util.logging.LogRecord) */ @Override public String format(final LogRecord logRecord) { StringBuffer sb = new StringBuffer(); sb.append(Logging.dateToString(new Date(logRecord.getMillis()))); sb.append(" ["); sb.append(logRecord.getLevel().getName()); sb.append("]: "); sb.append("Log from " + logRecord.getLoggerName()); sb.append('\n'); Throwable t = logRecord.getThrown(); StackTraceElement ste = null; if (t != null) { StackTraceElement[] stes = t.getStackTrace(); if (stes != null && stes.length > 0) ste = stes[0]; } sb.append(" "); sb.append(logRecord.getMessage()); boolean levelSevere = (logRecord.getLevel().intValue() >= Level.SEVERE.intValue()); if (ste != null || levelSevere) sb.append(" - "); if (ste != null) sb.append(ste.getClassName() + "." + ste.getMethodName()); else if (levelSevere) sb.append("***NO STACK TRACE***"); sb.append('\n'); if (logRecord.getThrown() instanceof OpenNTFNotesException) { LogRecordAdditionalInfo lrai = new LogRecordAdditionalInfo(logRecord); lrai.writeToLog(sb); } if (t != null && ste != null) { // Of course superfluous: t!=null, but otherwise we get a warning StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); t.printStackTrace(pw); sb.append(" "); sb.append(sw.toString().replace("\r\n", "\n")); sb.append("\n"); } return sb.toString(); } }