logback 配置文件编写

前端之家收集整理的这篇文章主要介绍了logback 配置文件编写前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Logback 配置

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

logback 的简单例子

xml文件大概结构 导图链接

xml

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

    <contextName>拽拽坏人帮</contextName>

    <!--输出到控制台 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%cn %d{hh:MM:ss} [%20logger{0}] - %message%n</pattern>
        </encoder>
    </appender>

    <logger name = "com.cck.MyLogback">
        <appender-ref ref = "STDOUT"/>
    </logger>

    <root level="debug"></root>

</configuration>

代码使用

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

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

    xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <contextName>拽拽坏人帮</contextName>
        
        <!--输出到控制台 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n</pattern>
            </encoder>
            <targer>
                System.err
            </target>
        </appender>
    
        <logger name="com.cck.MyLogback">
            <appender-ref ref="STDOUT" />
        </logger>
    
        <root level="debug"></root>
    </configuration>
    <target>String</target> 用于指定字符串在控制台的打印方式
    默认是 System.out,也可以是 System.err

    2. FileAppender 文件

    xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
    
        <contextName>拽拽坏人帮</contextName>
    
        <!--输出文件 -->
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <file>logback.log</file>
            <encoder>
                <pattern>%cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n</pattern>
            </encoder>
            <append>true</append>
            <prudent>true</prudent>
        </appender>
    
        <logger name="com.cck.MyLogback" level="debug">
            <appender-ref ref="FILE" />
        </logger>
    
        <root level="info"></root>
    </configuration>
    <file>logback.log</file> 指定日志文件

    <append>true</append> 日志是否追加到文件结尾,默认是true

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

    3. RollingFileAppender 滚动记录文件

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

    xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
    
        <contextName>拽拽坏人帮</contextName>
    
        <!--滚动记录文件 根据时间 -->
        <appender name="timeRollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder>
                <pattern>%cn -%.-1p %d{hh:MM:ss} [%8logger{26}] - %message%n</pattern>
            </encoder>
            
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>logFile/%d{yyyy/MM/dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
        </appender>
    
        <logger name="com.cck.MyLogback" level="debug">
            <appender-ref ref="timeRollFile" />
        </logger>
    
        <root level="info"></root>
    </configuration>
    <rollingPolicy></rollingPolicy> 指定滚动行为

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

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

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

    xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false">
    
        <contextName>拽拽坏人帮</contextName>
    
        <!--滚动记录文件 根据固定长度 -->
         <appender name="fixedRollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>testFixedRollFile.log</file>
            
            <encoder>
                <pattern>%d{hh:MM:ss} [%20logger{0}] - %message%n</pattern>
            </encoder>
    
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <fileNamePattern>logFile/logFile.%i.log</fileNamePattern>
                <minIndex>1</minIndex>
                <maxIndex>5</maxIndex>
            </rollingPolicy>
    
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <maxFileSize>1KB</maxFileSize>
            </triggeringPolicy>
        </appender>
    
        <logger name="com.cck.MyLogback" level="debug">
            <appender-ref ref="fixedRollFile" />
        </logger>
    
        <root level="info"></root>
    </configuration>
    <rollingPolicy></rollingPolicy> 指定根据窗口长度进滚动。
    注意,使用 FixedWindowRollingPolicy 必须声明 <file></file>节点

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

    rollingPolicy 子节点 <minIndex>1</minIndex> 指定 i 的最小值

    rollingPolicy 子节点 <maxIndex>5</maxIndex> 指定 i 的最大值

    <triggeringPolicy></triggeringPolicy > 指定何时滚动

    triggeringPolicy 子节点 <maxFileSize>1KB</maxFileSize> 指定文件大小为 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<ILoggingEvent> {                                                                       
                                                                                                                                                            
        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<String,String> 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使用

    <?xml version="1.0" encoding="UTF-8"?>                                                                                                                  
    <configuration debug="false">                                                                                                                           
                                                                                                                                                            
        <contextName>拽拽坏人帮</contextName>                                                                                                                    
                                                                                                                                                            
        <!-- 自定义 -->                                                                                                                                        
        <appender name="siftingLog" class="ch.qos.logback.classic.sift.SiftingAppender">                                                                                                                                                                                                                  
            <discriminator class="com.cck.MyLoggerDiscriminator" />                                                                                         
                                                                                                                                                            
            <sift>                                                                                                                                          
                <appender name="user-${user}" class="ch.qos.logback.core.rolling.RollingFileAppender">                                                      
                    <file>siftingLog/${user}.log</file>                                                                                                     
                    <encoder>                                                                                                                               
                        <pattern>%date{HH:mm:ss} %.-1level[%25logger{0}] - &lt;%message&gt;%n</pattern>                                                     
                    </encoder>                                                                                                                              
                    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">                                                              
                        <fileNamePattern>siftingLog/${user}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>                                                         
                    </rollingPolicy>                                                                                                                        
                </appender>                                                                                                                                 
            </sift>                                                                                                                                         
        </appender>                                                                                                                                         
                                                                                                                                                            
        <logger name="com.cck.MyLogback" level="debug">                                                                                                     
            <appender-ref ref="siftingLog" />                                                                                                               
        </logger>                                                                                                                                           
                                                                                                                                                            
        <root level="info"></root>                                                                                                                          
    </configuration>
    <discriminator class="com.cck.MyLoggerDiscriminator" /> 指定自定自定义的鉴别类

    第三步,使用

    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");
        }
    }

    猜你在找的XML相关文章