log4j已经是古董了,但是现在项目还在用,需要用到不同级别输出到不同文件,所以把几种实现方式记录下来,备忘!
下面的几种配置都是使用properties的情况,但是xml的原理也一样.
- 使用LevelRangeFilter
- 使用LevelMatchFilter
自定义Appender
最后再贴出下面一种需求的配置文件
- 项目info和error级别日志分开记录为 allInfo,allError文件
- 其中A模块的日志单独记录为afile
- 其中A模块的info级别日志只在afile记录,不在allinfo记录(info只记录一次)
- 其中A模块的error级别日志在afile,allError中都记录
下面详细说明:
-
1.使用LevelRangeFilter
- 这个应该是3种里面最方便的,配置如下
log4j.appender.InfoFile = org.apache.log4j.RollingFileAppender
log4j.appender.InfoFile.File = logs/info1.log
log4j.appender.InfoFile.MaxFileSize = 10MB
log4j.appender.InfoFile.Threshold = INFO
log4j.appender.InfoFile.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.InfoFile.filter.F1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.InfoFile.filter.F1.LevelMin=INFO
log4j.appender.InfoFile.filter.F1.LevelMax=INFO
这里通过Threshold指定输出级别为INFO,但是默认的大于INFO的也会输出.
下面增加的filter指定了最大级别和最小级别,都为INFO,所以最终只会输出INFO级别.
-
2.使用LevelMatchFilter
- 这个配置就稍微多点了,例如,我们输出INFO级别的,需要下面配置
log4j.appender.InfoFile2 = org.apache.log4j.RollingFileAppender
log4j.appender.InfoFile2.File = logs/info2.log
log4j.appender.InfoFile2.MaxFileSize = 10MB
log4j.appender.InfoFile2.Threshold = INFO
log4j.appender.InfoFile2.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile2.layout.ConversionPattern<