Log4J2


目录
  • Log4J2概述
  • Log4J2的级别
    • 日志输出级别
  • Log4J核心组件(Logger,Appender,Layout)
    • Logger
    • Appender
    • Layout

Log4J2概述

log4j2可以按照开发人员预先的设定,在指定的位置和情况下打印log语句,并且可以酌情关闭某些log语句,如开发阶段debug类型的语句等。

新特征:

  1. 更为先进的APL
  2. 强大的配置功能
  3. 支持插件扩展

Log4J2的级别

日志输出级别

  • FATAL 非常严重的错误
  • ERROR 错误
  • WARN 不一定是一个bug,但是有人可能会想知道这一情况
  • INFO 用于基本的,高层次的诊断信息
  • DEBUG 用于协助低层次的调试
  • TRACE 用于展现程序执行的轨迹

从严重性来看:

trace

级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个日志级别的都会输出。

示例:

public class Test {
	private static Logger logger = LogManager.getLogger(Test.class);
	public static void main(String[] args) {
		logger.trace("trace{}{}", "aaa", "bbb");
		logger.debug("debug");
		logger.info("info");
		logger.error("error");
		logger.fatal("fatal");
	}
}

说明:

没有为log4j2指定任何配置文件,默认级别为error,输出到Console。

如果要定义配置文件,在src目录下创建log4j2.xml文件。

Logger类负责输出日志,不同的日志级别调用不同的方法,支持占位符。

示例:

<?xml version="1.0" encoding="UTF-8"?>


	
		
	
 
   
	
		
	
   

Log4J核心组件(Logger,Appender,Layout)

Logger

负责输出日志,通过LogManager.getLogger()来获取Logger对象。

  • root

    Logger logger = LogManager.getRootLogger()
    
  • 带名字的Logger,自动继承root,除非使用additivity="false"。

    Logger logger = LogManager.getLogger(Test.class)
    

Logger配置


	
		
	
	
		
	

  • 每一个logger都需要关联一个appender
  • com.trkj.Test自动继承root,为了防止不重复输出,需要additivity="false"

Appender

Appenders用来决定一个log将被打印到那个目的地中,可选的打印目的地很多,如console、文件等。

  • ConsoleAppender

  • FileAppender

  • RollingFileAppender

  • JDBCAppender

  • ConsoleAppender

    将日志输出到Console控制台

    示例:

    <?xml version="1.0" encoding="UTF-8"?>
    
      
        
          
        
      
      
        
          
        
      
    
    
  • FileAppender

    将日志输出到文件

    示例:

    
    	
    		
    			%d %p %c{1.} [%t] %m%n
    		
    	
    
    
  • RollingFileAppender

    将文件输出到文件,但会创建多个文件,这样可以防止文件过大。

    需要指定文件拆分策略:

    1. 基于时间的拆分策略
      TimeBasedTriggeringPolicy

    2. 基于文件大小的拆分策略
      SizeBasedTriggeringPolicy

      示例:

      
      	
      		
      			%d %p %c{1.} [%t] %m%n
      		
      		
      			
      			
      		
      		
      	
      
      

      TimeBased Triggering Policy
      基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:
      interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
      modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00,。。。

  • JDBCAppender

    将日志保存到数据库

    示例:

    
        
          
          
          
          
          
          
        
     
    
  • 同时指定多个Appender

    
    	
    		
    	
    	
    		
    		
    	
    
    
    

Layout

通常,用户不止希望能定义log输出的位置,还希望可以定义输出的格式。这就可以通过将Appender与一个layout相关联来实现。

  • PatternLayout

  • HTMLLayout

  • JSONLayout

  • PatternLayout

    PatternLayout允许指定一种输出模式

    %d 时间
    %l 位置
    %L 行
    %m 日志内容
    %M 级别方法
    %n 换行
    %p 级别

? 示例:


	
		%d{DATE} %p %c{1.} %L [%t] %m-%M %n
	


或者

  • HTMLLayout

    以HTML表格的形式输出日志

    示例:

    
    	
    
    
  • JSONLayout

    以JSON格式输出,需要以下jar库的支持:

    • jackson-core-2.8.1

    • jackson-databind-2.8.1

    • jackson-annotations-2.8.1

      下载地址

? 示例: