maven项目中使用logback+slf4j

1. logback介绍

Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。

  • logback-core是其它两个模块的基础模块。
  • logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。
  • logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
    要引入logback,由于Logback-classic依赖slf4j-api.jar和logback-core.jar,所以要把slf4j-api.jar、logback-core.jar、logback-classic.jar,添加到要引入Logback日志管理的项目的class path中.

2. maven依赖

        
        
            org.slf4j
            slf4j-api
            1.7.20
        
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
        
        
            ch.qos.logback
            logback-core
            1.2.3
        
  1. 配置和使用

  2. 日志使用
    一定要使用slf4j的jar包,不要使用apache commons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

protected final Logger  logger = LoggerFactory.getLogger(this.getClass());  

使用:

@Controller  
@RequestMapping("/test")  
public class TestController {  
    protected final Logger  logger = LoggerFactory.getLogger(TestController .getClass());  
    @RequestMapping("/hello")  
    public void hello(HttpServletResponse response) throws IOException {  
        logger.debug("DEBUG TEST 这个地方输出DEBUG级别的日志");  
        logger.info("INFO test 这个地方输出INFO级别的日志");  
        logger.error("ERROR test 这个地方输出ERROR级别的日志");  
    }  
  
}  

2.Logback的默认配置

logback的配置文件都放在/src/main/resource/文件夹下的logback.xml文件中。其中logback.xml文件就是logback的配置文件。只要将这个文件放置好了之后,系统会自动找到这个配置文件。

如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的PatternLayoutEncoder 进行格式化。rootlogger 默认级别是 DEBUG。

logback配置文件

Logback 配置文件的语法非常灵活。正因为灵活,所以无法用 DTD 或 XML schema 进行定义。尽管如此,可以这样描述配置文件的基本结构:以开头,后面有零个或多个元素,有零个或多个元素,有最多一个元素。

Logback默认配置的采用的步骤

  1. 尝试在 classpath 下查找文件 logback-test.xml;
  2. 如果文件不存在,则查找文件 logback.xml;
  3. 如果两个文件都不存在,logback 用 Bas icConfigurator 自动对自己进行配置,这会导致记录输出到控制台。

假设配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurator ,创建一个最小化配置。最小化配置由一个关联到根 logger 的ConsoleAppender组成。输出用模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 的PatternLayoutEncoder 进行格式化。还有,根 logger 默认级别是 DEBUG。

3. 在控制台输出特定级别的日志

输出特定的ERROR级别的日志:



    
    
        
            [%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
        
    

    
    
        
        
    
 

结果只在控制台输出ERROR级别的日志。

4. 设置输出多个级别的日志




    
    
        
            [%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
        
    

    
    
        
        
        
    
 

5. 设置文件日志

这是一个比较简单的配置,没有不同级别的日志分别输出。



      
      
      
      

    
    
        
            [%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} %line: %msg%n
            
        
    

    
    
        ${LOG_HOME}/${appName}.log
        
            [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] %logger{36} : %n %msg %n
            UTF-8  
        
        
            ${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log
            
            10
                      
            
                5MB
            
        
    

    
     
        
        
    

          
    
    
        
        
        
         
        
    
 

6. 精确设置每个包下面的日志

我经常用上面定义的 appender 关联到我们的项目 ,当然也可以设置其他包的日志,例如 ,org.springframework

  
      
      
      
  

最后有几点需要注意:

1、logger 的日志级别若没显示定义,则继承最近的祖先logger(该logger需显示定义level,直到rootLogger)的日志级别。
logger的父子关系,由logger的名称决定,例如有三个logger,分别为:java.lang.util 、 java.lang 、java,
则java是java.lang的父logger, 是java.lang.util的祖先logger. 而同时java.lang是java.lang.util的父logger

2、logger的appender默认具有累加性(默认日志输出到当前logger的appender和所有祖先logger的appender中),可通过配置 “additivity”属性修改默认行为

详细的配置可以参考官方文档:http://logback.qos.ch/manual/configuration.html

7.配置sevlet,通过网页查看logback内部运行状态

对于web项目,我们可以配置sevlet,然后通过网页查看logback内部运行状态
当然也加入相应的依赖


  ch.qos.logback
  logback-access
  1.2.3
 

在web.xml添加

    
    
        ViewStatusMessages
        ch.qos.logback.classic.ViewStatusMessagesServlet
    

    
        ViewStatusMessages
        /lbClassicStatus
    
maven项目中使用logback+slf4j_第1张图片

8.分级别打印日志

对大项目来说,最好是分级别来打印日志

  
  
    
    
 
      
          
              
            
            [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] --%mdc{client} %msg%n  
          
      
    
      
        UTF-8
        ${LOG_HOME}/trace.log  
          
            logs/trace.%d{yyyy-MM-dd}.log  
          
          
            [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n  
         
        
      
    
       
        UTF-8
        ${LOG_HOME}/info.log  
          
            logs/info.%d{yyyy-MM-dd}.log  
          
          
            [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n  
        
         
            INFO  
            ACCEPT  
            DENY  
                
      
    
        
        UTF-8
        ${LOG_HOME}/debug.log  
          
            logs/debug.%d{yyyy-MM-dd}.log  
          
          
            [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n  
         
          
            DEBUG  
            ACCEPT  
            DENY  
              
      
    
    
       
        UTF-8
        ${LOG_HOME}/warn.log  
          
            logs/warn.%d{yyyy-MM-dd}.log  
          
          
            [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n  
         
          
            WARN  
            ACCEPT  
            DENY  
              
      
    
    
    
       
        UTF-8
        ${LOG_HOME}/error.log  
          
            logs/error.%d{yyyy-MM-dd}.log  
          
          
            [%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n  
         
          
            ERROR  
            ACCEPT  
            DENY  
              
      
    
   
     
      
          
        
             
            
           
              
      
    
  
maven项目中使用logback+slf4j_第2张图片

分别记录上面trace, info, debug, warn, error 的日志。

参考文章

http://blog.csdn.net/initphp/article/details/40891821
http://blog.csdn.net/kittaaron/article/details/9151103
http://blog.csdn.net/zhangliao613/article/details/53007184

你可能感兴趣的:(maven项目中使用logback+slf4j)