java中使用log4j 2(四)

2014-11-24 02:31:40 · 作者: · 浏览: 2
log4j/2.x/manual/appenders.html

下面介绍3种常用的Appender:ConsoleAppender、FileAppender、RollingFileAppender

4.1 ConsoleAppender

ConsoleAppender将输出写到System.err或System.out。上面测试例子中的Appender均为ConsoleAppender,输出写到了System.out。如果想将输出写到System.err,设置Console标签下的target为SYSTEM_ERR 即可

4.2 FileAppender

FileAppender将输出写到指定文件,在File标签下设置fileName即可。fileName可以是绝对路径的文件也可以是相对路径的文件

写到绝对路径文件

修改src下的log4j2.xml


  

  
  
    
     
     
      
     
     
   
  
    
     
      
     
     
   

  

运行Test01,log将写到E:Test01.log

写到相对路径文件

修改src下的log4j2.xml


  

  
  
    
     
     
      
     
     
   
  
    
     
      
     
     
   

  

运行Test01,log将写到E:projecteclipseTestlogsTest01.log

4.3 RollingFileAppender

RollingFileAppender跟FileAppender的基本用法一样。但RollingFileAppender可以设置log文件的size(单位:KB/MB/GB)上限、数量上限,当log文件超过设置的size上限,会自动被压缩。RollingFileAppender可以理解为滚动输出日志,如果log4j 2记录的日志达到上限,旧的日志将被删除,腾出的空间用于记录新的日志

修改src下的log4j2.xml


  

  
  
    
     
     
      
       
        
         
        
       
       
       
      
     
     
   
  
    
     
      
     
     
   

  

该配置设置日志写到Test.Log,如果Test.log的大小超过1KB,log4j 2会将Test.log制成压缩文件(压缩文件的命名格式是由filePattern设置的)。DefaultRolloverStrategy 标签的max设置压缩文件的上限(默认值为7)

将Test01的输出循环50次

package log4j2;

import java.io.FileNotFoundException;
import java.io.InputStream;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource;
import org.apache.logging.log4j.core.config.XMLConfigurationFactory;

public class Test01 {
	public static void main(String[] args) throws FileNotFoundException {
		Logger logger = LogManager.getLogger(Test01.class.getName()); 
		for (int i = 0; i < 50; i++) {
			logger.trace(trace);
			logger.debug(debug);
			logger.info(info);
			logger.warn(warn);
			logger.error(error);
			logger.fatal(fatal);
		}
		
	}

}
运行Test01

可以在E:projecteclipseTestlogs 4-02看到如下压缩文件

\

5. Filters

Filter可以过滤log事件,并控制log输出

log4j 2定义了10种 Filter:http://logging.apache.org/log4j/2.x/manual/filters.html

下面介绍一下BurstFilter的用法

BurstFilter可以控制某一级别的log的并发情况

修改src下的log4j2.xml


  

  
  
    
     
      
       
        
         
          
         
        
        
        
       
      
     
     
   
  
    
     
      
     
     
   

  

标签解释

level:BurstFilter过滤的事件级别

rate:每秒允许的log事件的平均值

maxBurst:当BurstFilter过滤的事件超过rate值,排队的log事件上限。超过此上限的log,将被丢弃。默认情况下maxBurst = 10*rate

按以上配置,假定每个log事件的执行时间较长,输出117个log事件(INFO级别)到RollingFileAppenders,BurstFilter会过滤得到INFO级别的log事件,之后会发生:16个log事件在执行,100个等待执行,1个被丢弃。

6. log4j 2指定某个类的log输出级别

在log4j2.xml设置Test01的输出级别

修改src下的log4j2.xml


  

  
  
    
     
      
     
     
   
  
    
     
      
     
     
     
      
     
     
   

  

修改Test01

package log4j2;

import java.io.FileNotFoundException;
import java.io.InputStream;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource;
import org.apache.logging.log4j.core.config.XMLConfigurationFactory;

public class Test01 {
	public static void main(String[] args) throws FileNotFoundException {
		Logger logger = LogManager.getLogger(Test01.class.getName()); 
		logger.trace(trace);
		logger.debug(debug);
		logger.info(info);
		logger.warn(warn);
		logger.error(error);
		logger.fatal(fatal);
				
	}

}

运行Test01

Output:

16:12:08.662 [main] TRACE log4j2.Test01 - trace
16:12:08.662 [main] TRACE log4j2.Test01 - trace
16:12:08.665 [main] DEBUG log4j2.