zoukankan      html  css  js  c++  java
  • SpringBoot整合logback日志框架

    一、基本情况概述

    1、SpringBoot默认集成了logback框架,想要修改为log4j日志框架,需要排除默认的log实现

    2、配置spring的日志输出形式有两种方式

    ①通过application.properties里面进行简单的设置

    ②通过外置的logback-spring.xml配置文件进行显式配置

    二、简单的application.properties配置

    此种方式只支持默认的logback日志形式,通过logging开头的属性进行简单的预定义配置项设置,较为简单,满足一些简单的需求。例如,建议使用STS(Spring Tool Suits)工具,有较好的提示

    #日志设置
    #springboot所有内部核心logger(包括嵌入式tomcat, mybatis, hibernate, spring)输出更多内容,自己应用并不会输出
    debug=false
    #彩色输出
    spring.output.ansi.enabled=detect

    #外置的配置文件位置,设置之后,以下的一些日志配置失效
    logging.config=classpath:logback-spring.xml
    logging.file.path=./log
    #logging.file.name=./spring.log
    logging.file.max-history=7
    logging.file.max-size=10MB
    logging.pattern.rolling-file-name=${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
    logging.level.com.example=info
    #logging.pattern.console=
    #logging.pattern.file=
    #激活哪个日志配置
    spring.profiles.active=prod

    三、通过传统的外置配置文件形式

    说明,文件名一定设置为logback-spring.xml, 利用这种方式可以通过<springProfile> 标签进行生产环境和开发环境的快捷设置,

    通过在application.properties文件中的

    spring.profiles.active=prod

    进行设置即可,网上找的也都差不多,觉得不够详细的,可以查找相关记录进行修改

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds"
        debug="false">
        <contextName>warning_message_receiver</contextName>
        <property name="pattern"
            value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%logger{60}:%line] - %msg%n" />
            <!-- windows机器上进行运行测试的日志记录地址 -->
        <property name="LOG_HOME" value="./log"></property>
        <!-- 部署之后的日志地址 -->
        <!-- <property name="LOG_HOME" value="/var/project/run/log/"></property> -->
    
        <!-- LEVEL:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF -->
         <!-- 彩色日志 -->
        <!-- 彩色日志依赖的渲染类 -->
        <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="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{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}}"/>
        
        <!-- 控制台输出 -->
        <appender name="STDOUT"
            class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">  
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            </layout>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>WARN</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>ACCEPT</onMismatch>
            </filter>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <!-- 输出到文件 -->
        <!-- <appender name="fileAppender"
            class="ch.qos.logback.core.FileAppender">
            <file>${LOG_HOME}/data_cleaning.log</file>
            <append>true</append>
            <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${pattern}</pattern>
            </encoder>
        </appender> -->
        <!-- 滚动输出到文件 -->
        <!-- RollingFileAppender的<file>子节点可有可无,通过设置<file>,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件),活动文件的名字不会改变; 
            如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“”会被当做目录分隔符。 -->
        <appender name="traceRollingFileApppender"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/warning_message_receiver_TRACE.log</file>
            <!-- RollingPolicy实际上就是负责日志文件的切换以及重命名的。包括日志文件归档,计算日志文件名,压缩工作等 -->
            <!-- 当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类 -->
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 必要节点,包含文件名及"%d"转换符,"%d"可以包含一个java.text.SimpleDateFormat指定的时间格式,默认格式是 yyyy-MM-dd -->
                <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_TRACE%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
                <!-- TriggeringPolicy 负责RollingFileAppender何时发生日志滚动 -->
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>20MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>20</maxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">  
                <pattern>${pattern}</pattern>
            </layout>
            <!-- LevelFilter: 级别过滤器,根据日志级别进行过滤 -->
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <!-- 用于配置符合过滤条件的操作 ACCEPT:日志会被立即处理,不再经过剩余过滤器 -->
                <onMatch>ACCEPT</onMatch>
                <!-- 用于配置不符合过滤条件的操作 DENY:日志将立即被抛弃不再经过其他过滤器 -->
                <onMismatch>DENY</onMismatch>
            </filter>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
                <!-- 用于配置符合过滤条件的操作 ACCEPT:日志会被立即处理,不再经过剩余过滤器 -->
                <onMatch>ACCEPT</onMatch>
                <!-- 用于配置不符合过滤条件的操作 DENY:日志将立即被抛弃不再经过其他过滤器 -->
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
    
        <appender name="infoRollingFileApppender"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/warning_message_receiver_INFO.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_INFO%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>20MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>20</maxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">  
                <pattern>${pattern}</pattern>
            </layout>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <appender name="warnRollingFileApppender"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/warning_message_receiver_WARN.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_WARN%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>20MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>20</maxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">  
                <pattern>${pattern}</pattern>
            </layout>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>WARN</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <appender name="errorRollingFileApppender"
            class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_HOME}/warning_message_receiver_ERROR.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warning_message_receiver_ERROR%d{yyyy-MM-dd}.log.%i.gz</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>20MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>20</maxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">  
                <pattern>${pattern}</pattern>
            </layout>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender>
        <springProfile name="dev">
            <!-- 配置com.example包的日志规则 -->
            <logger name="com.example" level="info" additivity="false">
                <appender-ref ref="STDOUT" />
                <appender-ref ref="infoRollingFileApppender" />
                <appender-ref ref="traceRollingFileApppender" />
                <appender-ref ref="warnRollingFileApppender" />
                <appender-ref ref="errorRollingFileApppender" />
            </logger>
        </springProfile>
        <springProfile name="prod">
            <!-- 配置com.example包的日志规则 -->
            <logger name="com.example" level="info" additivity="false">
                <!-- <appender-ref ref="STDOUT" /> -->
                <appender-ref ref="infoRollingFileApppender" />
                <appender-ref ref="traceRollingFileApppender" />
                <appender-ref ref="warnRollingFileApppender" />
                <appender-ref ref="errorRollingFileApppender" />
            </logger>
        </springProfile>
        
        <!-- 根节点日志规则 -->
        <root level="info">
            <appender-ref ref="STDOUT" />
        </root>
    </configuration>
    View Code

    四、拓展

    通过application.properties里面设置debug=true可以开启spring更详细的日志;

    采用外置配置文件,则通过修改<root>节点的level属性为debug即可

    参考网址 : https://www.cnblogs.com/jpfss/p/8341920.html

    极简版本:https://www.edoou.com/articles/1574161445933464

  • 相关阅读:
    最短路+线段交 POJ 1556 好题
    判断线段和直线相交 POJ 3304
    nginx配置pathinfo模式,解决访问404
    使用ORM关联关系,如何自己关联自己
    PHPCMS
    linux安装redis服务,配置PHP扩展
    后台银行卡算法
    静态类和非静态类
    PHP的闭包和匿名函数
    php获取前一天时间段,每个月的第一天到最后一天
  • 原文地址:https://www.cnblogs.com/marshwinter/p/13158578.html
Copyright © 2011-2022 走看看