log4j分级别输出到不同文件

log4j分级别输出到不同文件

log4j.rootLogger=DEBUG,console,fileout,fileout2

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %l: %m%n
log4j.appender.console.Encoding=UTF-8
log4j.appender.console.threshold=DEBUG

log4j.appender.fileout.Threshold = INFO
log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileout.File=./logs/FakeFront.log
log4j.appender.fileout.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %l: %m%n
log4j.appender.fileout.Encoding=UTF-8

log4j.appender.fileout2.Threshold = DEBUG
log4j.appender.fileout2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileout2.File=./logs/FakeFront2222.log
log4j.appender.fileout2.DatePattern='.'yyyy-MM-dd'22.log'
log4j.appender.fileout2.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout2.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %l: %m%n
log4j.appender.fileout2.Encoding=UTF-8

log4j.logger.org.apache.mina.filter.logging.LoggingFilter=ERROR
log4j.logger.com.ykk.socket.MinaClient=ERROR
log4j.logger.com.ykk.socket.ClientHandler=ERROR
log4j.logger.com.ykk.trade.service.service.FactorService=ERROR
log4j.logger.com.ykk.common.http.YkkWebAPIInterceptor=ERROR

注意:log4j.rootLogger 的值应该是多个appender 中级别最低的一个的值

log4j已经是古董了,但是现在项目还在用,需要用到不同级别输出到不同文件,所以把几种实现方式记录下来,备忘! 下面的几种配置都是使用properties的情况,但是xml的原理也一样.

使用LevelRangeFilter
使用LevelMatchFilter
自定义Appender最后再贴出下面一种需求的配置文件项目info和error级别日志分开记录为 allInfo,allError文件其中A模块的日志单独记录为afile其中A模块的info级别日志只在afile记录,不在allinfo记录(info只记录一次)其中A模块的error级别日志在afile,allError中都记录下面详细说明:

  1. 使用LevelRangeFilter
    这个应该是3种里面最方便的,配置如下

    log4j.appender.InfoFile = org.apache.log4j.RollingFileAppender
    log4j.appender.InfoFile.File = logs/info1.log
    log4j.appender.InfoFile.MaxFileSize = 10MB
    log4j.appender.InfoFile.Threshold = INFO
    log4j.appender.InfoFile.layout = org.apache.log4j.PatternLayout
    log4j.appender.InfoFile.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
    log4j.appender.InfoFile.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.InfoFile.filter.F1.LevelMin=INFO
    log4j.appender.InfoFile.filter.F1.LevelMax=INFO
    
  2. 使用LevelMatchFilter
    这个配置就稍微多点了,例如,我们输出INFO级别的,需要下面配置

    log4j.appender.InfoFile2 = org.apache.log4j.RollingFileAppender
    log4j.appender.InfoFile2.File = logs/info2.log
    log4j.appender.InfoFile2.MaxFileSize = 10MB
    log4j.appender.InfoFile2.Threshold = INFO
    log4j.appender.InfoFile2.layout = org.apache.log4j.PatternLayout
    log4j.appender.InfoFile2.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
    log4j.appender.InfoFile2.filter.F1=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.InfoFile2.filter.F1.levelToMatch=INFO
    log4j.appender.InfoFile2.filter.F1.AcceptOnMatch=true 
    log4j.appender.InfoFile2.filter.F2=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.InfoFile2.filter.F2.levelToMatch=ERROR
    log4j.appender.InfoFile2.filter.F2.AcceptOnMatch=false
    log4j.appender.InfoFile2.filter.F3=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.InfoFile2.filter.F3.levelToMatch=WARN
    log4j.appender.InfoFile2.filter.F3.AcceptOnMatch=false  
    log4j.appender.InfoFile2.filter.F4=org.apache.log4j.varia.LevelMatchFilter
    log4j.appender.InfoFile2.filter.F4.levelToMatch=DEBUG
    log4j.appender.InfoFile2.filter.F4.AcceptOnMatch=false
    
  3. 自定义Appender
    一种常见的配置文件如下

    log4j.rootLogger=INFO,InfoFile3,errorFile3
    log4j.appender.InfoFile3 = org.apache.log4j.RollingFileAppender
    log4j.appender.InfoFile3.File = logs/info3.log
    log4j.appender.InfoFile3.MaxFileSize = 10MB
    log4j.appender.InfoFile3.Threshold = INFO
    log4j.appender.InfoFile3.layout = org.apache.log4j.PatternLayout
    log4j.appender.InfoFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
    log4j.appender.errorFile3 = org.apache.log4j.RollingFileAppender
    log4j.appender.errorFile3.File = logs/error3.log
    log4j.appender.errorFile3.MaxFileSize = 10MB
    log4j.appender.errorFile3.Threshold = ERROR
    log4j.appender.errorFile3.layout = org.apache.log4j.PatternLayout
    log4j.appender.errorFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
    
package com.dingcheng.log;

import org.apache.log4j.Priority;
import org.apache.log4j.RollingFileAppender;

public class MyRollingFileAppender extends RollingFileAppender {  
     @Override  
     public boolean isAsSevereAsThreshold(Priority priority) {  
         return this.getThreshold().equals(priority);  
     }  
}
log4j.rootLogger=INFO,InfoFile3,errorFile3

log4j.appender.InfoFile3 = com.dingcheng.log.MyRollingFileAppender
log4j.appender.InfoFile3.File = logs/info3.log
log4j.appender.InfoFile3.MaxFileSize = 10MB
log4j.appender.InfoFile3.Threshold = INFO
log4j.appender.InfoFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

log4j.appender.errorFile3 = com.dingcheng.log.MyRollingFileAppender
log4j.appender.errorFile3.File = logs/error3.log
log4j.appender.errorFile3.MaxFileSize = 10MB
log4j.appender.errorFile3.Threshold = ERROR
log4j.appender.errorFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

当然除了上面的3种方法,还有自定义一个类,里面不同级别指向不同的文件

public class LogUtil{
    public static void error(String msg) {
        Logger.getLogger("error").error(msg);
    }
}

最后再贴出下面一种需求的配置文件

  1. 项目info和error级别日志分开记录为 allInfo,allError文件
  2. 其中A模块的日志单独记录为afile
  3. 其中A模块的info级别日志只在afile记录,不在allinfo记录(info只记录一次)
  4. 其中A模块的error级别日志在afile,allError中都记录
#根设置,输出级别为info级别, 输出文件为 allInfo,allError
log4j.rootLogger=INFO,allInfo,allError  

#定义allInfo的详细配置,只记录info级别
log4j.appender.allInfo = org.apache.log4j.RollingFileAppender
log4j.appender.allInfo.File = /logs/allInfo.log
log4j.appender.allInfo.MaxFileSize = 50MB
log4j.appender.allInfo.Threshold = INFO
log4j.appender.allInfo.layout = org.apache.log4j.PatternLayout
log4j.appender.allInfo.layout.ConversionPattern =[%p] %-d{yyyy-MM-dd HH:mm:ss} [%t] [%l]--> %m %x %n
log4j.appender.allInfo.filter.F1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.allInfo.filter.F1.LevelMin=INFO
log4j.appender.allInfo.filter.F1.LevelMax=INFO

#定义allError的详细配置,只记录error级别
log4j.appender.allError = org.apache.log4j.RollingFileAppender
log4j.appender.allError.File = /data/wuliu-provider/logs/order-error.log
log4j.appender.allError.MaxFileSize = 50MB
log4j.appender.allError.Threshold = ERROR
log4j.appender.allError.layout = org.apache.log4j.PatternLayout
log4j.appender.allError.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH:mm:ss} [%t] [%l]--> %m %x %n

#A模块单独配置,输出级别为INFO,输出文件为 afile,allError ; additivity=false指定不继承根设置
log4j.logger.AMODULE=INFO,afile,allError
log4j.additivity.AMODULE = false
log4j.appender.afile = org.apache.log4j.RollingFileAppender
log4j.appender.afile.File = /data/wuliu-provider/logs/YuanCheng.log
log4j.appender.afile.MaxFileSize = 50MB
log4j.appender.afile.Threshold = INFO
log4j.appender.afile.layout = org.apache.log4j.PatternLayout
log4j.appender.afile.layout.ConversionPattern =[%p] %d{yyyy-MM-dd HH\:mm\:ss} [%c]%m%n
private static Logger logger = Logger.getLogger("AMODULE");//指定配置文件中的名称
# 日志 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×