SpringBoot2多环境配置logback滚动日志

Maven需要的配置如下:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <spring.profiles.active>dev</spring.profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <spring.profiles.active>test</spring.profiles.active>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <spring.profiles.active>prod</spring.profiles.active>
            </properties>
        </profile>
    </profiles>

springboot的aplication.yml配置如下:

spring:
  application:
    name: Demo
  profiles:
    active: @spring.profiles.active@

需要创建三个不同环境配置文件,分别命名为:

application-dev.yml

application-prod.yml

application-test.yml

如图:

logback的配置文件命名为logback-spring.xml,springboot会自动识别,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="false">
    <!--日志文件主目录:程序目录-->
    <!-- 自定义标签,后面可以用${}引用 -->
    <!-- 日志级别 -->
    <property name="log.level" value="debug"/>
    <!-- 日志最大存储个数,如果打包的命名设置到天,则表示最多存3天的,若设置到时表示最多存3小时的 -->
    <property name="log.maxHistory" value="3"/>
    <property name="log.maxFileSize" value="1KB"/>
    <!-- 读取springboot配置文件application.yml中的属性标签,此处读取的日志存放路径,不带文件名,文件名后面根据级别命名 -->
    <springProperty scope="context" name="log.filePath" source="logging.file.path"/>
    <!-- 日志的打印格式,不带颜色,因为带颜色的在文件中不显示 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{10}: %msg%n"/>
    <!-- 控制台日志的打印格式,带颜色的 -->
    <property name="logconsole.pattern" value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}): %cyan(%msg%n)"/>

    <!-- 控制台中的打印配置 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${logconsole.pattern}</pattern>
        </encoder>
    </appender>

    <!-- debug日志在文件中打印的滚动日志配置,会单独生成一个文件 -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 设置输出文件名 -->
        <file>${log.filePath}/debug.log</file>
        <!-- 按照时间滚动自动打包存档 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 打包的文件名,当前设置到分(HH_mm)级别 -->
            <fileNamePattern>${log.filePath}/debug/debug-%d{yyyy-MM-dd_HH_mm}-log.zip</fileNamePattern>
            <!-- 一分钟打包一个,最多存三个 -->
            <maxHistory>${log.maxHistory}</maxHistory>
            <totalSizeCap>${log.maxFileSize}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 日志过滤,匹配到DEBUG级别的才输出到此文件,未匹配到的不输出 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- info日志在文件中打印的配置,会单独生成一个文件 -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.filePath}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd_HH_mm}-log.zip</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>
            <totalSizeCap>${log.maxFileSize}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error日志在文件中打印的配置,会单独生成一个文件 -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.filePath}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd_HH_mm}-log.zip</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>
            <totalSizeCap>${log.maxFileSize}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 开发环境配置自动根据springboot配置的环境配置(此配置根据maven的配置生效)生效 -->
    <springProfile name="dev">
        <!-- 配置的name值可以设置只在某包下的类生效,addtivity为true时相当于继承了root的配置,这样就会在控制台中也打印日志了,无需在此写一遍consoleAppender -->
        <logger name="com.study.demo" level="${log.level}" additivity="true">
            <appender-ref ref="debugAppender"/>
            <appender-ref ref="infoAppender"/>
            <appender-ref ref="errorAppender"/>
        </logger>
    </springProfile>

    <springProfile name="test">
        <logger name="com.study.demo" level="debug" additivity="true">
            <appender-ref ref="debugAppender"/>
            <!--<appender-ref ref="infoAppender"/>-->
            <appender-ref ref="errorAppender"/>
        </logger>
    </springProfile>

    <springProfile name="prod">
        <logger name="com.study.demo" level="error" additivity="true">
            <!--<appender-ref ref="debugAppender"/>
            <appender-ref ref="infoAppender"/>-->
            <appender-ref ref="errorAppender"/>
        </logger>
    </springProfile>

    <!-- 在root下所有日志打印info级别的 -->
    <root level="info">
        <appender-ref ref="consoleAppender"/>
    </root>

</configuration>

日志打印时,只需要在要打印日志的类上面注解@Slf4j(需要引入lombok的jar包),然后直接可以log.info(),log.debug().log.error()进行打印日志。

切换环境时可以在maven打包处勾选要切换的环境,切换时注意事项:

1、勾选要切换的环境;

2、重新import一下maven;

3、maven clean一下;

4、启动。

否则会报错,启动失败,也可以用maven的命令启动,然后加上要切的环境参数即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章