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的命令啓動,然後加上要切的環境參數即可。