package play.modules.logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.helpers.PatternConverter;
import org.apache.log4j.helpers.PatternParser;
import org.apache.log4j.spi.LoggingEvent;
public class ExtendedPatternLayout extends PatternLayout {
public ExtendedPatternLayout() {
}
public ExtendedPatternLayout(String pattern) {
super(pattern);
}
@Override
protected PatternParser createPatternParser(String pattern) {
return new PatternParser(pattern) {
@Override protected void finalizeConverter(char c) {
if (c == 'h') {
addConverter(new HeapSizePatternConverter());
}
else if (c == 'R') {
addConverter(createRequestIdPatternConverter());
}
else {
super.finalizeConverter(c);
}
}
};
}
protected RequestIdPatternConverter createRequestIdPatternConverter() {
return new RequestIdPatternConverter();
}
private static class HeapSizePatternConverter extends PatternConverter {
@Override protected String convert(LoggingEvent event) {
Runtime runtime = Runtime.getRuntime();
long used = runtime.totalMemory() - runtime.freeMemory();
return (used / 1024 / 1024 + 1) + "MB";
}
}
}