zoukankan      html  css  js  c++  java
  • log4j日志配置(按天/按日)

      项目中尽管对log4j有基本的配置,例如按天生成日志文件以作区分,但如果系统日志文件过大,则就需要考虑以更小的单位切分或者其他切分方式。下面就总结一下log4j常用的配置参数以及切分日志的不同方式。

    一、JAR包准备

      压缩包中有三个jar包:

    log4j-1.2.16.jar

    tomcat-juli-adapters.jar

    tomcat-juli.jar

      说明:请去官网下载相应版本号的tomcat-juli.jar,tomcat-juli-adapters.jar类包。

      下载地址:http://www.apache.org/dist/tomcat 在相应版本号中的bin/extras路径下。

    二、改动相关配置文件

      1、 改动${catalina.home}/conf/context.xml

        改动:<Context >为<Context swallowOutput="true">这样才能全部的把tomcat的stdout给接管过来。

      2、 复制log4j-1.2.16.jar和tomcat-juli-adapters.jar 到tomcat的lib下。

      3、 复制tomcat-juli.jar到${catalina.home}/bin下。在该文件夹会存在该文件,覆盖就可以。

      4、 建立log4j.properties,并把其放到到tomcat的/lib下。

    三、log4j.properties详解

      1、按时间切割日志

    #日志级别,还可以log4j.rootLogger=INFO,file2,file3 指定file2、3的输出文件
    log4j.rootLogger=info,exception,thread  
    
    #info
        #每一天产生1个日志文件
        log4j.appender.info=org.apache.log4j.DailyRollingFileAppender 
        #定义日志存放路径
        log4j.appender.info.File=/usr/tomcat_logs/mailSystem_info.log
        #日志文件是否追加
        log4j.appender.info.Append=true
        #定义的时间格式,如果时间定义到分钟(mm)就是每分钟生成一个日志文件,而这里定义的这个格式就是日志名后缀
        #log4j.appender.file3.DatePattern='_' yyyy-MM-dd-HH-mm  每分钟
        #log4j.appender.file3.DatePattern='_' yyyy-MM-dd-HH    每小时
        #log4j.appender.file3.DatePattern='_' yyyy-MM-dd    每天
        #log4j.appender.file3.DatePattern='_' yyyy-MM-dd-a    每半天
        
        #日志输出级别
        log4j.appender.info.Threshold=INFO
        #日志编码
        #log4j.appender.file3.Encoding=UTF-8 
        #日志中输出的日志的格式
        log4j.appender.info.layout=org.apache.log4j.PatternLayout
        #定义的日志格式
        log4j.appender.info.layout.ConversionPattern=%t %d %p [%c] - %m%n

      配置中采用DailyRollingFileAppender类,该类继承与FileAppender,so that the underlying file is rolled over at a user chosen frequency. The rolling schedule is specified by the “DatePattern” option。使用这些rolling schedule 需要注意一个前缀问题。例如if the “File” option is set to “/foo/bar.log” and the “DatePattern” set to '.'yyyy-MM-dd ,则到了midnight,the logging file /foo/bar.log will be copied to "/foo/bar.log.2017-01-01",也就是在bar.log文件后添加 ".yyyy-MM-dd"后缀。It is possible to specify monthly, weekly,half-daily, daily,hourly, or minutely rollover schedules。

      总共有:

    切分类型

    切分前

    切分后

    按月'.'yyyy-MM

    /foo/bar.log

    /foo/bar.log.2002-05

    按周 '.'yyyy-ww

    /foo/bar.log

    /foo/bar.log.2002-23

    按天 '.'yyyy-MM-dd

    /foo/bar.log

    /foo/bar.log.2002-03-08 default

    半天 '.'yyyy-MM-dd-a

    /foo/bar.log

    /foo/bar.log.2002-03-09-AM

    按时 '.'yyyy-MM-dd-HH

    /foo/bar.log

    /foo/bar.log.2002-03-09-10

    按分 '.'yyyy-MM-dd-HH-mm

    /foo/bar.log

    /foo/bar.log.2001-03-09-10-22


      代码:

    public DailyRollingFileAppender (Layout layout, String filename, String datePattern) throws IOException {
        super(layout, filename, true);
        this.datePattern = datePattern;
        activateOptions();
    }

      这些参数策略会传入到DailyRollingFileAppender的初始化方法中,创建一个DailyRollingFileAppender对象。

      2、按大小切割日志

    #debug
        log4j.appender.debug=org.apache.log4j.RollingFileAppender
        log4j.appender.debug.File=/usr/tomcat_logs/mailSystem_debug.log
        #设置日志文件的大小
        log4j.appender.debug.MaxFileSize=100M
        #保存10个备份文件
        log4j.appender.debug.MaxBackupIndex=10
        log4j.appender.debug.Append=true
        log4j.appender.debug.Threshold=DEBUG
        log4j.appender.debug.layout=org.apache.log4j.PatternLayout
        log4j.appender.debug.layout.ConversionPattern=%t %d %p [%c] - %m%n

      配置中使用到另一个类RollingFileAppender,这个类也继承子FileAppender,用于按照一定的size文件大小,back up 日志文件。

      这个类中起关键作用的两个参数maxFileSizemaxBackupIndex,用于确定每个日志文件的size大小和备份个数。默认分别为10MB和1,按照设置的index大小,会默认将文件copy to 1,2等文件后缀进行备份。

      3、Pattern字段解释

      在两个配置中,均使用PatternLayout和ConventionPattern类,PatternLayout主要用于日志输出相关,ConventionPattern用于定义日志文件的输出格式。其中ConventionPattern支持多种类型的日志输出,如线程信息、类信息,均已%打头进行配置,详情如下:

    %c  输出日志信息所属的类的全名,例如%c{2},对于com.max.spring.demo,便会输出spring.demo两级类信息。
    %d  输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
    %f   输出日志信息所属的类的类名
    %l   输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
    %m   输出代码中指定的信息,如log(message)中的message
    %n      输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
    %p      输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
    %r       输出自应用启动到输出该日志信息所耗费的毫秒数
    %t       输出产生该日志事件的线程名

  • 相关阅读:
    缓存算法之LRU与LFU
    银行家算法
    死锁,死锁的四个必要条件以及处理策略
    找出无序数组中位数的方法
    HTTP状态码
    进程调度算法
    宽字节wchar_t和窄字节char的相互转换
    胜天半子
    ? 题目 一道超难的奥数题,猜生日. A告诉B他生日的月份,告诉C他生日的日期 B说:“如果我不知道A的生日,那C肯定也不知道." C说:”本来我不知道,现在我知道了.“ B说:”哦,那我也知道了.
    有对夫妇生有一男一女,一天晚上,成员中的一个杀了另一个,剩下2个成员,1个是帮凶1个是目击者
  • 原文地址:https://www.cnblogs.com/jing99/p/9037043.html
Copyright © 2011-2022 走看看