Log4j 1.2
性能注意点
- 使用Slf4j
- 使用
if (logger.isDebugEnabled()) { ... }封装String连接或其他高开销的操作 - 避免多次打印Stack trace
- 尽量避免使用类名
%C, 文件名%F, 方法名%M, 行号%L,性能开销很大official warning - 通过缓存减少IO次数
immediateFlush- 是否每次log event都flush到磁盘,默认为
true,设置为false能提高性能,但是在系统崩溃时可能会丢失日志
- 是否每次log event都flush到磁盘,默认为
bufferedIO- 默认为
false时使用java.io.Writer,设置为ture则改用BufferedWriter,bufferSize默认8K,可调整
- 默认为
- 使用
AsyncAppender
性能测试
场景:单线程写入20,000条日志到文件
flush on, buffer off
656/602/522
flush on, buffer off, async
469/454/460flush off, buffer off
149/154/153
flush off, buffer off, async
153/140/134flush off, buffer on
104/104/100
其他
- Mapped Diagnostic Context (MDC)
- 记录特定信息,用于输出到日志(使用threadlocal存储),如用户等
|
|
- 控制日志只输出到一个Appender
additivity="false"
在程序中控制Appender
|
|
|
|