文章版权由做者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/java
Log4j做为经常使用的日志生成工具,其清除日志的策略却十分有限。只有在RollingFileAppender中能够经过设置MaxFileSize和maxBackupIndex属性来指定要保留的日志文件大小以及个数,从而实现自动清除。apache
可是实际生产中,咱们的真实的需求经常是定时生成日志,而后保留最近几天的日志,历史日志须要及时清理。但是Log4j中的DailyRollingFileAppender这个类却不带属性maxBackupIndex,maxFileSize等,因此没法经过直接配置实现。微信
针对这种状况,通常方法是写一个定时删除日志的脚本等,这里咱们讨论一种经过继承FileAppender,从新实现DailyRollingFileAppender类,而且带有按时间顺序清理日志的功能。app
a.完成自定义的日期类和文件过滤类,为进行文件命名和查找作准备。函数
b.继承FileAppender类,定义好文件输出日期格式以及文件备份参数。工具
c.重写核心的RollOver函数。布局
d.在RollOver函数中完成对备份数量的监测以及历史日志的删除。spa
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台仍是文件中;而输出格式则控制了日志信息的显示内容。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。这里,咱们主要探讨基于XML的配置方式。线程
基本语法是:3d
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。
这里,每个appenderName均是下面须要配置的日志信息的名称。
实际例子:
log4j.rootLogger=INFO ,stdout, ROLLING_ERROR_FILE, ROLLING_INFO_FILE
Log4j中提供的Appender主要有如下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
基本语法为:
实际例子:
log4j.appender.ROLLING_ERROR_FILE=org.apache.log4j.DailyRollingFileAppender
针对不一样的Appender,它们的属性也有必定的差异,这些属性主要是针对日志文件的命名规则、保存路径、删除策略等有关系。
Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示全部消息都会被当即输出,设为false则不输出,默认值是true。
Target=System.err:默认值是System.out。
Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示全部消息都会被当即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增长到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示全部消息都会被当即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增长到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定当前消息输出到logging.log4j文件中。
DatePattern='.'yyyy-MM:每个月滚动一第二天志文件,即每个月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM。
另外,也能够指定按周、天、时、分等来滚动日志文件,对应的格式以下:
1)'.'yyyy-MM:每个月
2)'.'yyyy-ww:每周
3)'.'yyyy-MM-dd:天天
4)'.'yyyy-MM-dd-a:天天两次
5)'.'yyyy-MM-dd-HH:每小时
6)'.'yyyy-MM-dd-HH-mm:每分钟
Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
ImmediateFlush=true:表示全部消息都会被当即输出,设为false则不输出,默认值是true。
Append=false:true表示消息增长到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
MaxFileSize=100KB:后缀能够是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
MaxBackupIndex=2:指定能够产生的滚动文件的最大数,例如,设为2则能够产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。
Log4j提供的layout有如下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(能够灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
Log4j采用相似C语言中的printf函数的打印格式格式化日志信息,打印参数以下: %m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,一般就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也能够在其后指定格式,好比:%d{yyy MMM dd HH:mm:ss,SSS},输出相似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
基本语法为:
实际例子:
log4j.appender.ROLLING_ERROR_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_ERROR_FILE.layout.ConversionPattern=[log] %d -%-4r [%t] %c %x%n %-5p - %m [%l] %n
-----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/
若是您以为本文确实帮助了您,能够微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^