docs: protected String formatOutput(String svc, LogLevel l, String msg, Throwable t)
  	{
  		// ??? for more severe output levels, a formatting routine which
  		// uses (part of) the throwable stack trace would be of advantage
  		final StringBuffer b = new StringBuffer(150);
  		synchronized (c) {
  			c.setTimeInMillis(System.currentTimeMillis());
  			b.append(c.get(Calendar.YEAR));
  			b.append('-').append(pad2Digits(c.get(Calendar.MONTH) + 1));
  			b.append('-').append(pad2Digits(c.get(Calendar.DAY_OF_MONTH)));
  			b.append(' ').append(pad2Digits(c.get(Calendar.HOUR_OF_DAY)));
  			b.append(':').append(pad2Digits(c.get(Calendar.MINUTE)));
  			b.append(':').append(pad2Digits(c.get(Calendar.SECOND)));
  			final int ms = c.get(Calendar.MILLISECOND);
  			b.append(',');
  			if (ms < 99)
  				b.append('0');
  			b.append(pad2Digits(ms));
  		}
  		b.append(" level=").append(l.toString());
  		b.append(", ");
  		final int dot = svc.lastIndexOf('.') + 1;
  		if (dot > 0 && dot < svc.length() && Character.isDigit(svc.charAt(dot)))
  			b.append(svc);
  		else
  			b.append(svc.substring(dot));
  		b.append(": ").append(msg);
  		if (t != null && t.getMessage() != null)
  			b.append(" (").append(t.getMessage()).append(")");
  		return b.toString();
  	}