1、首先在bootstrap.yml文件添加如下配置:

logging.config: classpath:logback-spring.xml //配置各个环境使用的log配置文件
logback.path: /home/work/logs //配置相应的环境log打印路径

2、不同环境动态配置日志路径和级别

动态配置日志打印路径:使用springProperty属性,source配置对应的yml文件的配置

<springProperty scope="context" name="LOG_HOME" source="logback.path"/>
	日志打印级别配置:
	<springProfile name="test">
	</springProfile>

3、logback-spring.xml配置如下:

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

<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <springProperty scope="context" name="LOG_HOME" source="logback.path"/>

    <property name="CONSOLE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} | %5p | ${PID:- } | %X{traceId:--} | %t | %-40.40logger{39} : %m%n"/>
    <property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} | %5p | ${PID:- } | %X{traceId:--} | %t | %-40.40logger{39} : %m%n"/>
    <!--输出到控制台 ConsoleAppender-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--展示格式 layout-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </layout>
    </appender>

    <!--错误日志-->
    <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/stdout-error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/stdout-error-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>5120MB</maxFileSize>
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--info日志-->
    <appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/stdout-info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/stdout-info-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>5120MB</maxFileSize>
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印info日志 -->
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印WARN日志 -->
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>NEUTRAL</onMismatch>
        </filter>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 异步输出 -->
    <appender name="ASYNCINFO" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>5120</queueSize>
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="infoFile"/>
    </appender>

    <!--debug日志-->
    <appender name="debugFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/stdout-debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/stdout-debug-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <maxFileSize>5120MB</maxFileSize>
            <MaxHistory>5</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印info日志 -->
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 心跳日志(HAProxy 检测应用状态日志)输出到单独文件 -->
    <appender name="HEARTBEAT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/stdout-heartbeat.log</File>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/stdout-heartbeat.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%message:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %message%n</pattern>
        </encoder>
    </appender>

    <logger name="HEARTBEAT_LOGGER" additivity="false" level="INFO">
        <appender-ref ref="HEARTBEAT_APPENDER"/>
    </logger>

    <springProfile name="local">

        <!-- sql打印 配置项目中mapper层的包路径 等级为debug级别-->
        <logger name="cn.com.dao" level="debug"></logger>
        <!-- sql打印 -->
        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="debugFile"/>
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="errorFile"/>
            <appender-ref ref="ASYNCINFO"/>
        </root>
    </springProfile>

    <springProfile name="test">

        <!-- sql打印 配置项目中mapper层的包路径-->
        <logger name="xxx.dao" level="debug"></logger>
        <!-- sql打印 -->
        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="debugFile"/>
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="errorFile"/>
            <appender-ref ref="ASYNCINFO"/>
        </root>
    </springProfile>

    <springProfile name="test1">

        <!-- sql打印 配置项目中mapper层的包路径-->
	     <logger name="xxx.client" level="debug"></logger>
        <!-- sql打印 -->
        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="debugFile"/>
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="errorFile"/>
            <appender-ref ref="ASYNCINFO"/>
        </root>
    </springProfile>

    <springProfile name="uat">
        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="debugFile"/>
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="errorFile"/>
            <appender-ref ref="ASYNCINFO"/>
        </root>
    </springProfile>

    <springProfile name="prod">
        <!-- 日志输出级别 -->
        <root level="info">
            <appender-ref ref="debugFile"/>
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="errorFile"/>
            <appender-ref ref="ASYNCINFO"/>
        </root>
    </springProfile>

</configuration>
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐