Custom log message format in JavaПубликувано / posted 2011-01-06 в категория / in category: Java
|

Sometimes default formating of the log messages in Java is just not good enough. For example: I needed dates to be formated as YYYY-MM-DD, not YYYY-M-D and more important: I needed and extra new line after each message for two purposes: 1. To improve readability and 2. To be compatible with one old (PHP based) tool of mine that I use to parse log files. Strangely enough, I was unable to find decent examples how to change the default behaviour and after few attempts I finally come with the following (you will have to replace FMConstants.LOGGER_NAME and FMConstants.LOGGER_LEVEL with your own values):
logger = Logger.getLogger(FMConstants.LOGGER_NAME);
logger.setLevel(FMConstants.LOGGER_LEVEL);
Handler handler = new ConsoleHandler();
handler.setLevel(FMConstants.LOGGER_LEVEL);
SimpleFormatter fmt = new SimpleFormatter() {
@Override
public String format(LogRecord record) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
StringBuffer sb = new StringBuffer();
sb.append(sdf.format(record.getMillis()));
sb.append(" - ");
if (record.getSourceClassName() != null) {
sb.append(record.getSourceClassName());
} else {
sb.append(record.getLoggerName());
}
if (record.getSourceMethodName() != null) {
sb.append(" ");
sb.append(record.getSourceMethodName());
}
String lineSeparator = (String) java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("line.separator"));
sb.append(lineSeparator);
sb.append(record.getLevel().getLocalizedName());
sb.append(": ");
sb.append(record.getMessage());
sb.append(lineSeparator);
sb.append(lineSeparator);
return sb.toString();
}
};
handler.setFormatter(fmt);
logger.addHandler(handler);
And the log output will look like:
2011-01-06 17:42:09 - com.bolyar.fm.FMConfigStorage load CONFIG: No value for last source dir. Will try to detect. 2011-01-06 17:42:09 - com.bolyar.fm.FMConfigStorage load CONFIG: Last source dir: C:\ 2011-01-06 17:42:09 - com.bolyar.fm.FMConfigStorage load CONFIG: No value for last target dir. Will try to detect. 2011-01-06 17:42:09 - com.bolyar.fm.FMConfigStorage load CONFIG: Last target dir: C:\
|
|
