一、问题来源
项目中对log4j的配置一直是每天自动生成一个新的日志文件,这里配置了4个不同级别的日志,意味着每天会生成4个不同的日志文件,时间久了日志会变的非常庞大。针对这个难题我在这做出优化配置说明。
二、现状
SpringMvc+Mybatis的架构,下面是每天自动生成一个文件的,下面这种配置的好处在于每天生成一个文件,如果我们程序出现了问题有日志就可以准确定位到具体的文件。但是缺点在于时间久了tomcat下logs目录会变大非常庞大。如果这时有一块很大的硬盘来存储那这种方式还是不错的。
# FATAL, ERROR, WARN, INFO, DEBUG message output to deference file
#Root appender setting ,errorfile,debugfile,infofile,warnfile,fatalfile
#\u672C\u5730\u5F00\u53D1
#log4j.rootLogger=DEBUG,stdout,debugfile,infofile,warnfile,errorfile
#\u670D\u52A1\u5668
log4j.rootLogger=infofile,warnfile,errorfile,debugfile
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n
# SqlMap logging configuration...
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
#defind debugfile
log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugfile.DatePattern='.'yyyy-MM-dd
log4j.appender.debugfile.File = ${catalina.home}/logs/kt/debug.log
#log4j.appender.debugfile.MaxFileSize=1024KB
#log4j.appender.debugfile.MaxBackupIndex=1
log4j.appender.debugfile.Append = true
log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout
log4j.appender.debugfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# \u5411\u4E0A\u629B\u51FA
log4j.additivity.debugfile = true
log4j.appender.debugfile.encoding=UTF-8
#defind infofile
log4j.appender.infofile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infofile.DatePattern='.'yyyy-MM-dd
log4j.appender.infofile.File = ${catalina.home}/logs/kt/info.log
#log4j.appender.infofile.MaxFileSize=1024KB
#log4j.appender.infofile.MaxBackupIndex=1
log4j.appender.infofile.Append = true
log4j.appender.infofile.Threshold = INFO
log4j.appender.infofile.layout = org.apache.log4j.PatternLayout
log4j.appender.infofile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# \u5411\u4E0A\u629B\u51FA
log4j.additivity.infofile = true
log4j.appender.infofile.encoding=UTF-8
#defind warnfile
log4j.appender.warnfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.warnfile.DatePattern='.'yyyy-MM-dd
log4j.appender.warnfile.File = ${catalina.home}/logs/kt/warn.log
#log4j.appender.warnfile.MaxFileSize=1024KB
#log4j.appender.warnfile.MaxBackupIndex=1
log4j.appender.warnfile.Append = true
log4j.appender.warnfile.Threshold = WARN
log4j.appender.warnfile.layout = org.apache.log4j.PatternLayout
log4j.appender.warnfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# \u5411\u4E0A\u629B\u51FA
log4j.additivity.warnfile = true
log4j.appender.warnfile.encoding=UTF-8
#defind errorfile
log4j.appender.errorfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd
log4j.appender.errorfile.File = ${catalina.home}/logs/kt/error.log
#log4j.appender.errorfile.MaxFileSize=1024KB
#log4j.appender.errorfile.MaxBackupIndex=1
log4j.appender.errorfile.Append = true
log4j.appender.errorfile.Threshold = ERROR
log4j.appender.errorfile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# \u5411\u4E0A\u629B\u51FA
log4j.additivity.errorfile = true
log4j.appender.errorfile.encoding=UTF-8
三、优化后的配置文件
对上面的这个配置文件做优化,优化的方式是所有的日志在一个文件里,设置当这个文件大于1024KB后自动生成一个新的文件,这里1024是可以修改的,具体多大可以自定义,然后在设置保存历史数据的几个文件。下面是优化后的配置文件。
可以看出日志两个方式不同,一种是DailyRollingFileAppender另一种是RollingFileAppender,这两个的区别在于一个每天自动生成一个新的文件,另一个全部在一个文件中。配置好之后使用方式和原来一样,# FATAL, ERROR, WARN, INFO, DEBUG message output to deference file
#Root appender setting ,errorfile,debugfile,infofile,warnfile,fatalfile
#\u672C\u5730\u5F00\u53D1
#log4j.rootLogger=DEBUG,stdout,debugfile,infofile,warnfile,errorfile
#\u670D\u52A1\u5668
log4j.rootLogger=infofile,warnfile,errorfile,debugfile
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n
# SqlMap logging configuration...
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
#defind debugfile
#log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugfile = org.apache.log4j.RollingFileAppender
#log4j.appender.debugfile.DatePattern='.'yyyy-MM-dd
log4j.appender.debugfile.File = ${catalina.home}/logs/kt/debug.log
log4j.appender.debugfile.MaxFileSize=10240KB
log4j.appender.debugfile.MaxBackupIndex=10
log4j.appender.debugfile.Append = true
log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout
log4j.appender.debugfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# \u5411\u4E0A\u629B\u51FA
log4j.additivity.debugfile = true
log4j.appender.debugfile.encoding=UTF-8
#defind infofile
#log4j.appender.infofile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infofile = org.apache.log4j.RollingFileAppender
#log4j.appender.infofile.DatePattern='.'yyyy-MM-dd
log4j.appender.infofile.File = ${catalina.home}/logs/kt/info.log
log4j.appender.infofile.MaxFileSize=5120KB
log4j.appender.infofile.MaxBackupIndex=10
log4j.appender.infofile.Append = true
log4j.appender.infofile.Threshold = INFO
log4j.appender.infofile.layout = org.apache.log4j.PatternLayout
log4j.appender.infofile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# \u5411\u4E0A\u629B\u51FA
log4j.additivity.infofile = true
log4j.appender.infofile.encoding=UTF-8
#defind warnfile
#log4j.appender.warnfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.warnfile = org.apache.log4j.RollingFileAppender
#log4j.appender.warnfile.DatePattern='.'yyyy-MM-dd
log4j.appender.warnfile.File = ${catalina.home}/logs/kt/warn.log
log4j.appender.warnfile.MaxFileSize=5120KB
log4j.appender.warnfile.MaxBackupIndex=10
log4j.appender.warnfile.Append = true
log4j.appender.warnfile.Threshold = WARN
log4j.appender.warnfile.layout = org.apache.log4j.PatternLayout
log4j.appender.warnfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# \u5411\u4E0A\u629B\u51FA
log4j.additivity.warnfile = true
log4j.appender.warnfile.encoding=UTF-8
#defind errorfile
#log4j.appender.errorfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorfile = org.apache.log4j.RollingFileAppender
#log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd
log4j.appender.errorfile.File = ${catalina.home}/logs/kt/error.log
log4j.appender.errorfile.MaxFileSize=5120KB
log4j.appender.errorfile.MaxBackupIndex=10
log4j.appender.errorfile.Append = true
log4j.appender.errorfile.Threshold = ERROR
log4j.appender.errorfile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorfile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
# \u5411\u4E0A\u629B\u51FA
log4j.additivity.errorfile = true
log4j.appender.errorfile.encoding=UTF-8
可以看出日志两个方式不同,一种是DailyRollingFileAppender另一种是RollingFileAppender,这两个的区别在于一个每天自动生成一个新的文件,另一个全部在一个文件中。配置好之后使用方式和原来一样
修改的4个配置文件的同一个位置
之前的输出的效果
优化之后的效果