1、 自定义 Log4j log4j.propertieslog4j.rootLogger=OFFlog4j.appender.logfile.encoding=UTF-8log4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Threshold=DEBUG#自定义输出 %Z %Tlog4j.appender.console.layout=mon.log.ExPatternLayoutlog4j.appender.console.layout.ConversionPattern=%dyyyyMMdd
2、 HH:mm:ss.SSSSSS %Z %p %F:%L %M %T %m%.yeahka=stdout,console,I,E.yeahka=false#指定文件名 info.log_yyyymmddlog4j.appender.I=mon.log.MyFileAppenderlog4j.appender.I.layout=mon.log.ExPatternLayoutlog4j.appender.I.layout.ConversionPattern=%dyyyyMMdd HH:mm:ss.SSSSSS %Z %p %F:%L %M %T %m%nlog4j.appender.I.Thres
3、hold=INFOlog4j.appender.I.append=truelog4j.appender.I.file=$catalina.home/logs/agent/info.loglog4j.appender.E=mon.log.MyFileAppenderlog4j.appender.E.layout=mon.log.ExPatternLayoutlog4j.appender.E.layout.ConversionPattern=%dyyyyMMdd HH:mm:ss.SSSSSS %Z %p %F:%L %M %T %m%nlog4j.appender.E.Threshold=ERR
4、ORlog4j.appender.E.append=truelog4j.appender.E.file=$catalina.home/logs/agent/error.logpackage mon.log;import org.apache.log4j.PatternLayout;import org.apache.log4j.helpers.PatternParser;public class ExPatternLayout extends PatternLayout public ExPatternLayout(String pattern) super(pattern);public E
5、xPatternLayout() super();/* 重写createPatternParser方法,返回PatternParser的子类*/Overrideprotected PatternParser createPatternParser(String pattern) return new ExPatternParser(pattern);package mon.log;import org.apache.log4j.helpers.FormattingInfo;import org.apache.log4j.helpers.PatternConverter;import org.a
6、pache.log4j.helpers.PatternParser;import org.apache.log4j.spi.LoggingEvent;public class ExPatternParser extends PatternParser public ExPatternParser(String pattern) super(pattern);/* 重写finalizeConverter,对特定的占位符进行处理,T表示线程ID占位符 Z表示时间戳*/Overrideprotected void finalizeConverter(char c) if (c = T) this.a
7、ddConverter(new ExPatternConverter(this.formattingInfo); else if (c = Z) this.addConverter(new ExPatternConverterTime(this.formattingInfo); else super.finalizeConverter(c);private static class ExPatternConverter extends PatternConverter public ExPatternConverter(FormattingInfo fi) super(fi);/* 当需要显示
8、线程ID的时候,返回当前调用线程的ID*/Overrideprotected String convert(LoggingEvent event) return String.valueOf(Thread.currentThread().getId();private static class ExPatternConverterTime extends PatternConverter public ExPatternConverterTime(FormattingInfo fi) super(fi);/* 当需要显示线程ID的时候,返回当前调用线程的ID*/Overrideprotecte
9、d String convert(LoggingEvent event) return String.valueOf(System.currentTimeMillis()/1000);package mon.log;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.log4j.DailyRollingFileAppender;public class MyFileAppender extends DailyRollingFileAppender
10、 private static final SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMdd“);Overridepublic synchronized void setFile(String fileName, boolean append,boolean bufferedIO, int bufferSize) throws IOException fileName = fileName + “_“ + sdf.format(new Date();super.setFile(fileName, append, this.bufferedIO, this.bufferSize);效果: