package gov.nih.ncgc.bard.tools;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.ConsoleHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
/**
* A simplistic, all-in-one-line, formatter for logging.
* <p/>
* This is primarily used by the CAP extraction code, but can be reused by
* other classes. If so it will probably move to the tools package in the
* future.
*
* @author Rajarshi Guha
*/
public class LogConfig {
private final LogManager logManager;
private final Logger rootLogger;
private final Handler defaultHandler = new ConsoleHandler();
private final SimpleFormatter defaultFormatter = new SimpleFormatter();
public LogConfig() {
super();
this.logManager = LogManager.getLogManager();
this.rootLogger = Logger.getLogger("");
configure();
}
final void configure() {
defaultHandler.setFormatter(new LineFormatter());
defaultHandler.setLevel(Level.INFO);
rootLogger.setLevel(Level.INFO);
rootLogger.addHandler(defaultHandler);
logManager.addLogger(rootLogger);
}
}
class LineFormatter extends Formatter {
private static final String LINE_SEP = System.getProperty("line.separator");
private static final String FIELD_SEP = " ";
private ThreadLocal dateFormat = new ThreadLocal() {
protected DateFormat initialValue() {
return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS");
}
};
@Override
public String format(LogRecord logRecord) {
StringBuilder logEntry = new StringBuilder();
logEntry.append(((DateFormat) dateFormat.get()).format(new Date(logRecord.getMillis())));
logEntry.append(FIELD_SEP);
logEntry.append(logRecord.getLoggerName());
logEntry.append(FIELD_SEP);
logEntry.append(logRecord.getLevel().getName());
logEntry.append(FIELD_SEP);
logEntry.append(logRecord.getMessage());
logEntry.append(LINE_SEP);
return logEntry.toString();
}
}