logback配置和使用

简介

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

  • logback-core是其它两个模块的基础模块。

  • logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API,使你可以很方便地更换成其它日志系统,如log4j或JDK14 Logging。

  • logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

配置

配置pom.xml

logback需要logback-corelogback-classicslf4j-apilogback-access这4个依赖。其中logback-classic已经包含了logback-core和slf4j-api依赖,由于Maven依赖的传递性,所以我们只需导入logback-classic和logback-access依赖即可。

    
        
          ch.qos.logback
          logback-classic
          1.3.0-alpha4
        
        
          ch.qos.logback
          logback-access
          1.3.0-alpha4
        
    

初始化步骤

1. 在类路径中查找logback-test.xml文件。

2. 如果没有找到,则在类路径中查找logback.groovy文件。

3. 如果没有找到,则在类路径中查找logback.xml文件。

4. 如果没有找到,则尝试使用ServiceLoader加载classpath下META-INF\services\ch.qos.logback.classic.spi.Configurator文件中配置的com.qos.logback.classic.spi.Configurator实现类(Configurator文件内容为实现类的完全限定类名)。

5. 如果还是没有找到,则会加载默认配置,日志默认会输出到控制台,也就是使用BasicConfigurator,BasicConfigurator也是com.qos.logback.classic.spi.Configurator接口的实现类。

public class BasicConfigurator extends ContextAwareBase implements Configurator {

    public BasicConfigurator() {
    }

    public void configure(LoggerContext lc) {
        addInfo("Setting up default configuration.");
        
        ConsoleAppender ca = new ConsoleAppender();
        ca.setContext(lc);
        ca.setName("console");
        LayoutWrappingEncoder encoder = new LayoutWrappingEncoder();
        encoder.setContext(lc);
        
 
        // same as 
        // PatternLayout layout = new PatternLayout();
        // layout.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
        TTLLLayout layout = new TTLLLayout();
 
        layout.setContext(lc);
        layout.start();
        encoder.setLayout(layout);
        
        ca.setEncoder(encoder);
        ca.start();
        
        Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
        rootLogger.addAppender(ca);
    }
}

使用logback.xml


  
  
    
  
  
    
      %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %msg%n
    
  
  
  
  
    
    ${filePath}app.log
    
    
        %date [%level] [%thread] %logger{80} [%file : %line] %msg%n
    
    
    
    
      
      ${filePath}app.log%d{yyyy-MM-dd}.log
     
      
      30
      3GB
    
   
  
  
  
    ${filePath}other.log
    
      ${filePath}other.log%d{yyyy-MM-dd}%i.log
       
       1KB    
       60
       20GB
    
    
        %date [%level] [%thread] %logger{80} [%file : %line] %msg%n
    
  
  
  
  
        
  

  
  
    
    
    
  

测试:

public class HelloService {
    private final static Logger logger = LoggerFactory.getLogger(HelloService.class);
    
    public static void main(String[] args) {
        //根据logback.xml中配置的日志级别,TRACE级别的日志将不会输出,只会输出DEBUG及以上级别的日志。
        //TRACE < DEBUG < INFO <  WARN < ERROR
        logger.trace("---------------trace---------------");
        logger.debug("---------------debug---------------");
        logger.info("---------------info---------------");
        logger.warn("---------------warn---------------");
        logger.error("---------------error---------------");
    }
}

常用技巧

1. 使用占位符

        logger.debug("我是" + name + ",我今年" + age + "岁,很高兴认识你!");//普通方式
        logger.debug("我是{},我今年{}岁,很高兴认识你!", name, age);//占位符方式(推荐)

当debug日志被禁用时,普通方式中,参数依然会被构造拼接,而在占位符方式中,参数不会进行构造拼接。

2. 使用时应该使用slf4j的API而不是使用logback的API(依赖日志门面,而不是依赖具体的日志实现,便于更换其他日志框架)

3. 自动重新加载配置文件

将 元素的scan属性设置为true,logback会定时的扫描配置文件,如果配置文件发生了更改,将自动重新加载配置文件。默认每分钟扫描一次,可以设置scanPeriod属性来指定扫描间隔。

 
  ...
 

你可能感兴趣的:(logback配置和使用)