// $Id: PatternFormatter.java,v 1.2 2009-06-08 17:47:18 mike Exp $
package org.faceless.util.log;
import java.text.*;
import java.util.logging.*;
import java.util.logging.Formatter;
import java.io.*;
import java.util.*;
/**
* A simple, configurable formatter for the java.util.logging package.
* It works like the
*
* PatternLayout class for Log4J - the codes are the closest analogous matches from the
* java.util.logging package. See that class for full details.
*
logging.properties file, and may be
* set for each level. Here's an example:
*
* org.faceless.util.log.PatternFormatter.format = %d{yyyy-MM-dd} %p: %m %x
* org.faceless.util.log.PatternFormatter.SEVERE.format = %d: ERROR: %s at %c(%m)
*
* * Alternatively the {@link #setFormat setFormat()} methods may be called to set the message formats *
* This code was originally written 2009-06-08 by Mike Bremford and is in the public domain. *
*/ public class PatternFormatter extends Formatter { private static final String[] LEVELS = { "FINEST", "FINER", "FINE", "CONFIG", "INFO", "WARNING", "SEVERE" }; private static final String DEFAULT = "%d %p: %m %x"; private Map levelformats, dateformats; private String format = DEFAULT; /** * Create a new PatternFormatter */ public PatternFormatter() { LogManager manager = LogManager.getLogManager(); this.format = DEFAULT; this.dateformats = Collections.synchronizedMap(new HashMap()); String s = manager.getProperty(getClass().getName()+".format"); if (s != null && s.trim().length() > 0) { setFormat(null, s); } for (int i=0;ilevel is null)
* for all levels
* @param level one of FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE or null
* @param format the format string
*/
public synchronized void setFormat(String level, String format) {
if (level==null) {
this.format = format;
} else {
if (levelformats==null) {
levelformats = new HashMap();
}
levelformats.put(level, format);
}
}
public String format(LogRecord record) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
StringBuffer premod = new StringBuffer();
String thisformat = null;
if (levelformats!=null) {
thisformat = (String)levelformats.get(record.getLevel().getName());
}
if (thisformat==null) {
thisformat = this.format;
}
for (int i=0;i