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
|
|
|
|