Log4j配置学习文档之二 处理日滚文件-实现原理
2017-04-19 13:55
1436 查看
实现原理
处理系统自己log4j定义的日滚日志文件
在系统中使用log4j中的RollingFileAppender和DailyRollingFileAppender可以实现日志文件的滚动,这里主要针对DailyRollingFileAppender产生的日滚文件做处理,因为DailyRollingFileAppender是每天都会滚动产生一个日志文件的(默认每天产生,DatePattern为’.’yyyy-MM-dd也会每天产生),产生的文件格式类似(设定的日志文件如果叫logfile.log的话)logfile.log.2016-12-27。而DailyRollingFileAppender又不支持MaxFileSize和MaxBackupIndex,所以时间一长的话,服务器里的日志文件就会很多,很耗存储空间,如果能够保留最近几天或者最近一周的文件就好了。所以本文档的出发点就是要让DailyRollingFileAppender产生的日滚文件保留最近一周的。系统log4.properties配置如下
log4j.rootLogger=INFO, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%t] - <%m>%n #add the parameter can write the sql to console log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=INFO log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.logfile.File=${catalina.home}/logs/OpenLog.log #DailyRollingFileAppender不支持MaxFileSize和MaxBackupIndex #log4j.appender.logfile.MaxFileSize=100MB # 但是这里可以通过程序来让他“支持”MaxBackupIndex log4j.appender.logfile.MaxBackupIndex=7 # Pattern to output: date priority [category] - message log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%t] - %m%n
原理
原理大概是:定义一个监听器,监听器在启动的时候启动一个定时器,log4j.properties文件加上一个表示保留日志文件备份数的属性,比如MaxBackupIndex,然后定时器每天定时扫描tomcat下的日志文件,按日志文件后缀升序排序,和MaxBackupIndex作比较,如果产生的日志文件数比MaxBackupIndex大的话就把时间较小的多余的日志文件删除掉,这样的话就可以保证log4j里定义的logfile.log在tomcat中只保留时间最近的MaxBackupIndex这么多个的日志文件了。处理localhost_access_log
在tomcat的conf目录下的server.xml有这样一段配置<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
这个会在logs下每天生成一个localhost_access_log的日志文件,文件的内容记录的是http请求信息。
产生的日志文件名格式类似这样
也就是说localhost_access_log日志文件也是一个日滚文件,每天都会生成一个的话,服务器会有压力,利用上面的原理,我们可以把localhost_access_log产生的文件名格式改成像上面那样以[.日期]结尾,就可以重用上面的方法来删除掉多余的localhost_access_log文件了。
原理:
把server.xml中的localhost_access_log的配置的[suffix=”.txt”]去掉<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern ="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/> 去掉suffix=".txt"改为 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log."/>
这样tomcat产生的localhost_access_log就也是以日期为后缀的日志文件了
然后在上面对log4j系统日志文件做处理的时候就可以顺便处理localhost_access_log文件了。
当然了,原来就已经生成的localhost_access_log.txt文件还是会存在的,这就需要我们手动删除掉,或者批量把他们的.txt后缀去掉
linux中tomcat/logs下执行
rename 's/\.txt//' ./*
去掉文件的.txt后缀,然后就可以统一交给程序来处理了
处理catalina.out
catalina.out里记录的内容主要是程序里System.out,e.printStackTrace等的信息,catalina.out日志文件只有一个,不会自己日滚,所以往往时间长了之后,catalina.out文件会非常大,所以需要对catalina.out做大小的控制处理,网上有些解决办法是直接把catalina.out的输出给关闭掉或者修改日志信息输出的等级来减少信息输出(参考:http://blog.csdn.net/vicky_yaoxj/article/details/25110033)。还有另外一种方法是把catalina.out变成像log4j那样的日滚文件来控制每个文件的大小,这里也主要实现一下这种方法。原理
首先需要把catalina.out变成每日产生一个文件并且是以[.日期]结尾的形式,然后再通过上面的处理方法来删除多余的catalina.out把catalina.out变成日滚文件有两种办法:
Linux下使用cronolog工具来切分catalina.out (参考:http://www.tuicool.com/articles/IZNrYb)
使用log4j切割 (参考:http://baalwolf.iteye.com/blog/1464093)
这里用第二种,步骤:
下载tomcat-juli.jar放在tomcat的bin目录下
拷贝log4j.jar,lo4j.properties到tomcat的lib目录下
删除conf/logging.properties
重启tomcat
log4j.properties的配置如下
log4j.rootLogger=INFO,CATALINA log4j.logger.com.danga.MemCached.MemCachedClient=WARN,CATALINA #log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender #log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.encoding = UTF-8 #log4j.appender.CONSOLE.layout.conversionPattern =[%p-%d{yyyy/MM/dd/HH:mm:ss}]%c{1}.(%L) - %m%n # Define CATALINA appenders log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender log4j.appender.CATALINA.file = ${catalina.base}/logs/catalina.out log4j.appender.CATALINA.DatePattern ='.'yyyy-MM-dd log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout log4j.appender.CATALINA.layout.conversionPattern = [%p-%d{yyyy/MM/dd/HH:mm:ss}]%c{1}.(%L) - %m%n log4j.appender.CATALINA.append = true
这样lo4j会自动在午夜切割catalina.out成catalina.out.2011-03-07
相关文章推荐
- Log4j配置学习文档之二 处理日滚文件-模拟实现
- java:log4j学习(3)-转帖:Log4J 最佳实践之全能配置文件
- python处理excel文档作为配置文件
- 韩顺平_php从入门到精通_视频教程_第2讲_html运行原理②_html文件基本结构_html元素和属性_学习笔记_源代码图解_PPT文档整理
- Tomcat学习之二:tomcat安装、配置及目录文件说明
- JAVA WEB开发之基于xml配置文件的分页实现(一) 分页配置原理
- hibernate3 学习笔记(三) hibernate 日志配置文件 log4j.properties
- LOG4J的配置..实现了输出到控制台、文件、回滚文件、发送日志邮件
- 数据分析与处理之二(Leveldb 实现原理)
- struts1.2原理:什么是struts,如何处理配置文件的大的问题?
- Tomcat学习之二:tomcat安装、配置及目录文件说明
- 标准C处理类似INI配置文件的键值型文档
- ITCAST视频-Spring学习笔记(使用Spring配置文件实现AOP)
- java学习笔记7 - Spring mvc 统一异常处理和静态文件的配置
- Tomcat服务器配置文件server.xml的配置解析及Context的配置(网上文档的学习整理)
- Log4j 学习日记 - 手工加载配置文件
- log4j学习记录 log4j配置文件的配置
- Quartz.NET 2.0 学习笔记(3) :通过配置文件实现任务调度
- mybatis学习笔记--mapper配置文件中大于小于怎么处理
- Struts2使用通配符加载配置文件和通配符方法的底层实现学习