logback 配置文件编写

Logback 配置

本文讲logback的xml文件的配置,其中主要是在介绍各类appender。

logback 的简单例子

xml文件大概结构 导图链接

xml




    拽拽坏人帮

    
    
        
            %cn %d{hh:MM:ss} [%20logger{0}] - %message%n
        
    

    
        
    

    



代码使用

public class MyLogback {

    private final static Logger logger 
        = LoggerFactory.getLogger("com.cck.MyLogback");

    public static void main(String[] args) {

        logger.info("hello world");
    }
}

xml配置中的appender

appender 节点是配置日志的目的地,该节点必须指定name和class属性,不同的class会有不同的子节点。

分别有以下几种类型的appender

  • ConsoleAppender   控制台
  • FileAppender     文件
  • RollingFileAppender  滚动记录文件
  • SiftingAppender      自定义筛选文件

1. ConsoleAppender 控制台

xml




    拽拽坏人帮
    
    
    
        
            %cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n
        
        
            System.err
        
    

    
        
    

    

String 用于指定字符串在控制台的打印方式
默认是 System.out, 也可以是 System.err

2. FileAppender 文件

xml




    拽拽坏人帮

    
    
        logback.log
        
            %cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n
        
        true
        true
    

    
        
    

    
logback.log 指定日志文件名

true 日志是否追加到文件结尾,默认是true

true true的情况下,日志会被安全地写入到文件 (加了锁,因为存在多个FileAppender同时向日志文件写入的情况),默认是false

3. RollingFileAppender 滚动记录文件

3.1 滚动记录文件 -- 根据时间 TimeBasedRollingPolicy

xml




    拽拽坏人帮

    
    
        
            %cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n
        
        
        
            logFile/%d{yyyy/MM/dd}.log
            30
        
    

    
        
    

    
指定滚动行为

rollingPolicy 子节点 指定文件名模式, yyyy/mm/dd 表示按天滚动 模式例子

30 控制保存的最大文件数量
如果是每天滚动30表示保存最近30天的日志文件

3.2 滚动记录文件 -- 根据长度 FixedWindowRollingPolicy

xml




    拽拽坏人帮

    
     
        testFixedRollFile.log
        
        
            %d{hh:MM:ss} [%20logger{0}] - %message%n
        

        
            logFile/logFile.%i.log
            1
            5
        

        
            1KB
        
    

    
        
    

    

指定根据窗口长度进滚动。
注意,使用 FixedWindowRollingPolicy 必须声明 节点

rollingPolicy 子节点 指定命名模式
注意,必须包含%i,i 为窗口索引。
滚动时,日志文件名为logFile/logFile'i'.log
eg .logFile/logFile1.log logFile/logFile2.log

rollingPolicy 子节点 1 指定 i 的最小值

rollingPolicy 子节点 5 指定 i 的最大值

指定何时滚动

triggeringPolicy 子节点 1KB 指定文件大小为 1KB 时进行滚动

4. SiftingAppender 自定义筛选文件

假设有以下需求

userId 是6位的,现在想让前4位id相同的用户的日志放在一个文件夹中。并且id为 000000 单独拿出来。
也就是以下的效果:

           /000000.log
           /0001
              /01.log
              /23.log
           /0002
              /12.log
              /00.log

第一步,按照业务需求编写Java类

package com.cck;                                                                                                                                                                                                                                                                                               
import java.util.Map;                                                                                                                                                                                                                                                                                     
import ch.qos.logback.classic.spi.ILoggingEvent;                                                                                                        
import ch.qos.logback.core.sift.AbstractDiscriminator;                                                                                                  
                                                                                                                                                        
public class MyLoggerDiscriminator extends AbstractDiscriminator {                                                                       
                                                                                                                                                        
    public final static String KEY = "user";                                                                                                            
                                                                                                                                                        
    private String filePath;                                                                                                                            
    private String fileName;                                                                                                                            
                                                                                                                                                        
    private String defaultValue = "000000";                                                                                                             
                                                                                                                                                        
    public String getDefaultValue() {                                                                                                                   
        return defaultValue;                                                                                                                            
    }                                                                                                                                                   
                                                                                                                                                        
    public void setDefaultValue(String defaultValue) {                                                                                                  
        this.defaultValue = defaultValue;                                                                                                               
    }                                                                                                                                                   
                                                                                                                                                        
    @Override                                                                                                                                           
    public String getDiscriminatingValue(ILoggingEvent e) {                                                                                             
        // 拿到mdc                                                                                                                                        
        Map mdc = e.getMDCPropertyMap();                                                                                                
                                                                                                                                                        
        String user = mdc.get(KEY);                                                                                                                     
                                                                                                                                                        
        if(user == null || user == "000000") {                                                                                                          
            return defaultValue;                                                                                                                        
        }                                                                                                                                               
        // 返回一个路径                                                                                                                                       
        filePath = user.substring(0, 4) + "/";                                                                                                          
        fileName = user.substring(4, 6);                                                                                                                
        return filePath + fileName;                                                                                                                     
    }                                                                                                                                                   
                                                                                                                                                        
    @Override                                                                                                                                           
    public String getKey() {                                                                                                                            
        return KEY;                                                                                                                                     
    }                                                                                                                                                   
                                                                                                                                                        
}   

第二步,在xml使用

                                                                                                                  
                                                                                                                           
                                                                                                                                                        
    拽拽坏人帮                                                                                                                    
                                                                                                                                                        
                                                                                                                                            
                                                                                                                                                                                                                      
                                                                                                 
                                                                                                                                                        
                                                                                                                                                  
                                                                  
                siftingLog/${user}.log                                                                                                     
                                                                                                                                               
                    %date{HH:mm:ss} %.-1level[%25logger{0}] - <%message>%n                                                     
                                                                                                                                              
                                                                              
                    siftingLog/${user}.%d{yyyy-MM-dd}.log.gz                                                         
                                                                                                                                        
                                                                                                                                             
                                                                                                                                                 
                                                                                                                                             
                                                                                                                                                        
                                                                                                         
                                                                                                                       
                                                                                                                                               
                                                                                                                                                        
                                                                                                                              
                                                                                                                                        
指定自定自定义的鉴别类

第三步,使用

package com.cck;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

public class MyLogback {

    private final static Logger logger = LoggerFactory.getLogger("com.cck.MyLogback");

    public static void main(String[] args) {
        
        MDC.put(MyLoggerDiscriminator.KEY, "156651");
        logger.debug("hello world");
    }
}

你可能感兴趣的:(logback,配置,配置文件,xml)