springboot logback.xml配置


springboot logback.xml配置

         

                        

                                    

logback.xml

                    

文件加载

public class ContextInitializer {

    final public static String GROOVY_AUTOCONFIG_FILE = "logback.groovy";
    final public static String AUTOCONFIG_FILE = "logback.xml";
    final public static String TEST_AUTOCONFIG_FILE = "logback-test.xml";
    final public static String CONFIG_FILE_PROPERTY = "logback.configurationFile";

    public URL findURLOfDefaultConfigurationFile(boolean updateStatus) {
        ClassLoader myClassLoader = Loader.getClassLoaderOfObject(this);
        URL url = findConfigFileURLFromSystemProperties(myClassLoader, updateStatus);
                  //从系统路径中加载日志配置文件
        if (url != null) {
            return url;
        }

        url = getResource(TEST_AUTOCONFIG_FILE, myClassLoader, updateStatus);
        if (url != null) {
            return url;
        }   //项目类路径中加载logback-test.xml

        url = getResource(GROOVY_AUTOCONFIG_FILE, myClassLoader, updateStatus);
        if (url != null) {
            return url;
        }   //项目类路径中加载logback.groovy

        return getResource(AUTOCONFIG_FILE, myClassLoader, updateStatus);
               //项目类路径中加载logback.xml
    }

    private URL findConfigFileURLFromSystemProperties(ClassLoader classLoader, boolean updateStatus) {
        String logbackConfigFile = OptionHelper.getSystemProperty(CONFIG_FILE_PROPERTY);
                                   //系统变量logback.configurationFile指定文件位置
        if (logbackConfigFile != null) {
            URL result = null;
            try {
                result = new URL(logbackConfigFile);
                return result;
            } catch (MalformedURLException e) {
                // so, resource is not a URL:
                // attempt to get the resource from the class path
                result = Loader.getResource(logbackConfigFile, classLoader);
                if (result != null) {
                    return result;
                }
                File f = new File(logbackConfigFile);
                if (f.exists() && f.isFile()) {
                    try {
                        result = f.toURI().toURL();
                        return result;
                    } catch (MalformedURLException e1) {
                    }
                }
            } finally {
                if (updateStatus) {
                    statusOnResourceSearch(logbackConfigFile, classLoader, result);
                }
            }
        }
        return null;
    }

    private URL getResource(String filename, ClassLoader myClassLoader, boolean updateStatus) {
                //项目类路径中加载日志配置文件
        URL url = Loader.getResource(filename, myClassLoader);
        if (updateStatus) {
            statusOnResourceSearch(filename, myClassLoader, url);
        }
        return url;
    }

                                 

                         

                                    

configuration

        

根节点属性:

scan:当配置文件修改时是否重新加载,默认为true;

scanPeriod:扫描间隔时间,如"60 seconds",不带单位时,默认为毫秒;

debug:是否输出logback的内部日志,默认为false

          

子节点

<property name=" " value=" "/>:设置属性值

<contextName>name</contextName>:设置上下文的名称

<timestamp key="" datePattern=""/>:设置时间戳的格式

        

            

                                    

appender

      

configuration子节点,可设置日志输出目的地,可为控制台、文件、数据库等

          

appender属性:

name:appender的名称

class:appender使用的输出类

            

appender子节点:

<append>true</append>:是否在文件后面追加,默认为true

<encoder>。。。</encoder>:输出格式

<prudent>false</prudent>:为true时,多个appender向同一个文件输出时可保证安全,但效率较低,默认为false

          

*************

Appender类

       

ConsoleAppender:输出到控制台

public class ConsoleAppender<E> extends OutputStreamAppender<E> {

    protected ConsoleTarget target;  //systemout、systemerr,默认为systemout
    protected boolean withJansi;

           

FileAppender:输出到文件

public class FileAppender<E> extends OutputStreamAppender<E> {

    protected boolean append = true;
    protected String fileName = null;
    private boolean prudent = false;
    private FileSize bufferSize = new FileSize(8192L);

        

RollingFileAppender:滚动输出文件,文件输出常用这个类

public class RollingFileAppender<E> extends FileAppender<E> {

    File currentlyActiveFile;
    TriggeringPolicy<E> triggeringPolicy;
    RollingPolicy rollingPolicy;

          

RollingPolicy:文件滚动策略

public interface RollingPolicy extends LifeCycle {

    void rollover() throws RolloverFailure;
    void setParent(FileAppender<?> appender);

    String getActiveFileName();
    CompressionMode getCompressionMode();
}

              

           

TimeBasedRollingPolicy:时间滚动策略,常用此滚动策略

public class TimeBasedRollingPolicy<E> extends RollingPolicyBase implements TriggeringPolicy<E> {

    private int maxHistory = 0;
    protected FileSize totalSizeCap = new FileSize(0L);
    TimeBasedFileNamingAndTriggeringPolicy<E> timeBasedFileNamingAndTriggeringPolicy;
    boolean cleanHistoryOnStart = false;

           

SizeAndTimeBasedRollingPolicy:文件大小、时间滚动策略

public class SizeAndTimeBasedRollingPolicy<E> extends TimeBasedRollingPolicy<E> {

    FileSize maxFileSize;

            

FixedWindowRollingPolicy:固定窗口滚动(设置滚动文件名字),需设置触发滚动策略

public class FixedWindowRollingPolicy extends RollingPolicyBase {

    int maxIndex = 7;    //窗口索引最大值
    int minIndex = 1;    //窗口索引最小值
    public static final String ZIP_ENTRY_DATE_PATTERN = "yyyy-MM-dd_HHmm";
    private static int MAX_WINDOW_SIZE = 20;   //窗口索引最大为20

         

SizeBasedTriggeringPolicy:文件大小触发滚动策略

public class SizeBasedTriggeringPolicy<E> extends TriggeringPolicyBase<E> {

    FileSize maxFileSize = new FileSize(10485760L);

            

*************

使用示例

         

输出到文件

                

          

使用时间滚动输出到文件

                

         

使用大小、时间滚动输出到文件

                

使用size限制文件大小,文件命名时需带%i

            

滚动策略FixedWindowRollingPolicy、触发滚动策略SizedBasedTriggeringPolicy

                

使用size限制文件大小时,文件命名需带%i

        

              

                                    

logger

         

logger属性

name:指定包名、或者类的全限定名

level:日志输出级别,如果不设置,默认与root的日志级别相同

additivity:是否输出到root节点,默认为true

           

子节点

<appender-ref ref="  "/>:ref引用的内容为appender的name

         

               

                                    

root

            

root为特殊的logger,只有一个属性level

子节点

<append-ref ref="  "/>:ref引用的内容为appender的name

        

              

                                    

配置示例

           

logback.xml:日志配置文件,放在resources目录下

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <property name="log.path" value="e:/hhhh/"/>
    <property name="console.pattern" value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <property name="file.pattern" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${console.pattern}</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.FileAppender">
        <file>${log.path}/my.log</file>
        <encoder>
            <pattern>${file.pattern}</pattern>
        </encoder>
    </appender>

    <appender name="file2" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/mylog.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>${file.pattern}</pattern>
        </encoder>
    </appender>

    <appender name="mysql" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
            <dataSource class="com.alibaba.druid.pool.DruidDataSource">
                <url>jdbc:mysql://localhost:3306/log?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8</url>
                <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
                <username>root</username>
                <password>123456</password>
            </dataSource>
        </connectionSource>
    </appender>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
        <appender-ref ref="file2"/>
        <appender-ref ref="mysql"/>
    </root>
</configuration>

     

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值