日志框架使用详解(slf4j、log4j、logback)

1. 简介

slf4j :

slf4的全称是Simple Logging Facade for Java ,即简单日志门面。实现了日志框架一些通用的api,结合日志框架一起使用,最终日志的格式、记录级别、输出方式等都是通过绑定具体的日志框架实现的。

log4j:

log4j是apache实现的一个开源的日志框架。

logback:

logback也是由log4j的作者设计的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现。(性能好于log4j)。

log4j和logback都可以单独使用,也可以绑定slf4j一起使用。(推荐绑定slf4)

使用slf4j绑定日志框架的优势

例如,在项目中使用了SLF4J记录日志,并且绑定了log4j,则日志会以log4j的风格输出;后期需要改为以logback的风格输出日志,只需要将log4j替换成logback即可,不用修改项目中的代码。(这也是为什么推荐slf4j结合日志框架一起使用的原因)。

log4j和logback

logback相对log4j有了相对多的改进,单两者的用法几乎差别不大。下面是logback 的优势:

  • 更快的执行速度
  • 充分的测试
  • logback-calssic非常自然的实现了SLF4J
  • 丰富的扩展文档
  • 自动重新载入配置文件
  • 自动要归档日志文件

以上,从性能的角度,可以尽快从log4j迁移到logback上来。

2 使用示例

slf4j绑定log4j的用法

这里我们使用IDEA 和Maven。

1. 在pom.xml文件中添加相关依赖。


    org.slf4j
    slf4j-log4j12
    1.7.21

此时会自动添加三个jar包

2.配置文件

log4j的正常运行需要配置文件,配置文件的类型:log4j.xml ,也可以是log4j.properties 。需要为其配置 root 、appender、layout等信息。

log4j.properties 配置文件

### set log levels ###
log4j.rootLogger = debug , stdout , D , E

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = C:/logs/properties_log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

### 保存异常信息到单独文件 ###
#log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.D.File = logs/error.log ## 异常日志文件名
#log4j.appender.D.Append = true
#log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
#log4j.appender.D.layout = org.apache.log4j.PatternLayout
#log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

log4j.xml配置文件





    
    
    
        
        
            
        
    

    
    
        
        
        
            
        
    

    
    

    
    
    
        
        
    


    
    
        
        
        
        
        
        

        
        
        
    

这两个配置文件任选其一,将配置文件放在resource的根目录下。

3.编写java类,并记录日志。

package com.shun.web;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;



@Controller
public class HelloController{

    Logger logger = LoggerFactory.getLogger(HelloController.class);
	@RequestMapping("/index")
	public String hello(){

    try{
        int b  =   1/0;

    }catch (Exception e){
        logger.error("=======",e);
    }

        //级别为debug的日志
        logger.debug("Hello! debug!");
        //级别为info的日志
        logger.info("Hello! info!");
        //级别为warn的日志
        logger.warn("Hello! warn!");
        //级别为error的日志
        logger.error("Hello! error!");
		System.out.println("111");
		return "index";
	}
	
}

slf4j绑定logback的用法

1. pom.xml添加依赖


    ch.qos.logback
    logback-classic
    1.1.7

网上教程添加了很多,其实只要添加这一个,其他的依赖jar都会被下载下来。

2. 配置文件

logback.xlm



	
		true
	

	
		
			
				logback: %d {HH:mm:ss.SSS} %logger{36} - %M - %msg%n
                
			
		


    
        /logs/logback_log.log
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
        
        true
        false
    


    
		
			
            
        

 

3.3.编写java类,并记录日志。(代码与log4j的调用代码相同)

package com.shun.web;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;



@Controller
public class HelloController{

    Logger logger = LoggerFactory.getLogger(HelloController.class);
	@RequestMapping("/index")
	public String hello(){

    try{
        int b  =   1/0;

    }catch (Exception e){
        logger.error("=======",e);
    }

        //级别为debug的日志
        logger.debug("Hello! debug!");
        //级别为info的日志
        logger.info("Hello! info!");
        //级别为warn的日志
        logger.warn("Hello! warn!");
        //级别为error的日志
        logger.error("Hello! error!");
		System.out.println("111");
		return "index";
	}
	
}

参考资料

https://www.cnblogs.com/Sinte-Beuve/p/5758971.html

你可能感兴趣的:(日志)