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的命令启动,然后加上要切的环境参数即可。