zoukankan      html  css  js  c++  java
  • 基于Log4j完成定时创建和删除日志的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

    1.背景

    Log4j作为常用的日志生成工具,其清除日志的策略却十分有限。只有在RollingFileAppender中可以通过设置MaxFileSize和maxBackupIndex属性来指定要保留的日志文件大小以及个数,从而实现自动清除。

     

    但是实际生产中,我们的真实的需求常常是定时生成日志,然后保留最近几天的日志,历史日志需要及时清理。可是Log4j中的DailyRollingFileAppender这个类却不带属性maxBackupIndex,maxFileSize等,所以无法通过直接配置实现。

    针对这种情况,一般方法是写一个定时删除日志的脚本等,这里我们讨论一种通过继承FileAppender,重新实现DailyRollingFileAppender类,并且带有按时间顺序清理日志的功能。

    2.具体实现

    2.1代码实现

    a.完成自定义的日期类和文件过滤类,为进行文件命名和查找做准备。

     

    b.继承FileAppender类,定义好文件输出日期格式以及文件备份参数。

     

    c.重写核心的RollOver函数。

    
    

    d.在RollOver函数中完成对备份数量的监测以及历史日志的删除。

    2.2配置实现

     

    3.Log4j各配置的含义

    Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。这里,我们主要探讨基于XML的配置方式。

    3.1配置根logger

    基本语法是:

     

    其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。

    这里,每一个appenderName均是下面需要配置的日志信息的名称。

    实际例子:

    log4j.rootLogger=INFO ,stdout, ROLLING_ERROR_FILE, ROLLING_INFO_FILE

    3.2配置日志信息输出目的地Appeder

    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,它们的属性也有一定的差别,这些属性主要是针对日志文件的命名规则、保存路径、删除策略等有关系。

    3.2.1 ConsoleAppender的属性

    Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。

    ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。

    Target=System.err:默认值是System.out。

    3.2.2 FileAppender的属性

    Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。

    ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。

    Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。

    File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。

    3.2.3 DailyRollingFileAppender的属性

    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:每分钟

    3.2.4 RollingFileAppender的属性

    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文件。

    3.3 配置日志信息的格式(布局)layout

    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/

                                                                                        如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                                                                                                                

  • 相关阅读:
    推荐引擎初探
    基于支持向量机的机械零件剩余寿命区间估计
    PCA与KPCA
    利用PCA进行故障监测
    Calling Matlab function from python: “initializer must be a rectangular nested sequence”
    pandas的resample重采样
    北斗网络时钟服务器的特点
    sntp时间服务器的介绍
    网络校时服务器
    电力同步时钟系统介绍
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/6501681.html
Copyright © 2011-2022 走看看