1. 程式人生 > >spring boot 中logback多環境配置

spring boot 中logback多環境配置

spring boot 配置logback

spring boot自帶了log列印功能,使用的是Commons logging 具體可以參考spring boot log
因此,我們只需要在resources中新增一個logback-spring.xml的logback的配置檔案就可以實現正常的日誌列印了。然而我們的目標是要實現多環境log配置,即本地輸出到控制檯,生產,測試輸出到檔案。
logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include
resource="org/springframework/boot/logging/logback/base.xml" />
<logger name="org.springframework.web" level="INFO" /> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <springProfile name="prod"> <!-- 注意這裡一定要放到springProfile裡, 否則在你本機執行的時候還是會去找相應的檔案 --> <appender name="FILE" class
="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌檔案輸出的檔名--> <FileNamePattern>/services/logs/spring-boot-example.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日誌檔案保留天數--> <maxHistory>15</maxHistory> <totalSizeCap>30GB</totalSizeCap> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日誌檔案最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender"> <discardingThreshold>0</discardingThreshold> <queueSize>500</queueSize> <appender-ref ref="FILE" /> </appender> </springProfile> <springProfile name="dev"> <root level="INFO"> <appender-ref ref="consoleAppender" /> </root> </springProfile> <springProfile name="junit"> <root level="INFO"> <appender-ref ref="consoleAppender" /> <appender-ref ref="asyncFileAppender" /> </root> </springProfile> <springProfile name="test"> <root level="INFO"> <appender-ref ref="asyncFileAppender" /> </root> </springProfile> <springProfile name="pro"> <root level="INFO"> <appender-ref ref="asyncFileAppender" /> </root> </springProfile> </configuration>

application.yaml

spring:
  profiles:
    active: dev
---
server:
  port: 8001
spring:
  profiles: dev
  output:
    ansi:
      enabled: detect #配置輸出console的ide中的配色,並沒有什麼用
---
server:
  port: 8009
spring:
  profiles: test
---
server:
  port: 8008
spring:
  profiles: prod

注意在logback-spring.xml的配置中,如果不把<appender name="FILE></append>放到<springPofile></springPofile>中,就算你只是輸出到console, 還是會去建立FILE中設定的log檔案。當然日誌還是在控制檯輸出,並不會寫到log檔案中。這個問題並不僅僅出現在spring boot 中,是logback本身的問題,就算不用spring也會出現這種問題。