1. 程式人生 > >Java中多環境Logback配置與ELK日誌傳送

Java中多環境Logback配置與ELK日誌傳送

Java中多環境Logback配置與ELK日誌傳送   一、專案基於SpringBoot實現,引入SpringBoot相關庫後,本文還要講上傳到ELK的Logstash,所以需要在pom.xml中加入:
        <!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.2</
version> </dependency>
  二、基於SpringBoot,要實現日誌的多環境配置,比如test\dev\uat\prod,這時需要把logback.xml改為logback-spring.xml,否則無法使用基於 spring.profiles.active=dev 等方式來配置環境。  
<?xml version="1.0" encoding="UTF-8" ?>
<!-- scan="true"    當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true。 
--> <!-- scanPeriod="30 seconds" 設定每30秒自動掃描,若沒有指定具體單位則以milliseconds為標準(單位:milliseconds, seconds, minutes or hours) --> <!-- debug="false"當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。--> <configuration scan="true" scanPeriod="30 seconds"> <!-- 上下文名稱 -->
<contextName>test</contextName> <!-- 存放日誌檔案路徑 --> <property name="Log_Home" value="./logs"/> <!-- INFO級別 --> <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>${Log_Home}/info.log</File> <!-- 根據時間來制定滾動策略 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern> ${Log_Home}/info.%d{yyyy-MM-dd}.%i.log.gz </FileNamePattern> <!-- 多久後自動清楚舊的日誌檔案,單位:月 --> <MaxHistory>12</MaxHistory> <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <!-- 預設值是 10MB,文件最大值 --> <MaxFileSize>100MB</MaxFileSize> </TimeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern> </encoder> </appender> <!-- ch.qos.logback.core.ConsoleAppender 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符 --> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!--上傳日誌到LogStash--> <appender name="LOGSTASH_uat" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>172.16.4.141:5044</destination> <!-- encoder必須配置,有多種可選 --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"appName":"backend-sync"}</customFields> </encoder> <connectionStrategy> <roundRobin> <connectionTTL>5 minutes</connectionTTL> </roundRobin> </connectionStrategy> </appender> <!--上傳日誌到LogStash--> <appender name="LOGSTASH_dev" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>172.16.4.141:5044</destination> <!-- encoder必須配置,有多種可選 --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"appName":"backend-sync"}</customFields> </encoder> <connectionStrategy> <roundRobin> <connectionTTL>5 minutes</connectionTTL> </roundRobin> </connectionStrategy> </appender> <springProfile name="uat,prod"> <!-- 當前日誌總級別為TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF --> <root level="WARN"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE_INFO"/> <appender-ref ref="LOGSTASH_uat"/> </root> <logger name="com.yungoal" level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE_INFO"/> <appender-ref ref="LOGSTASH_uat"/> </logger> </springProfile> <springProfile name="dev,test"> <!-- 當前日誌總級別為TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF --> <root level="WARN"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE_INFO"/> <appender-ref ref="LOGSTASH_dev"/> </root> <logger name="com.yungoal" level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE_INFO"/> <appender-ref ref="LOGSTASH_dev"/> </logger> </springProfile> </configuration>

 

    三、使用方法     方法一:java -jar myapplication.jar --spring.profiles.active=dev     方法二:建立spring boot的application.properties在類目錄下,然後裡面加入一行spring.profiles.active=dev,然後再建立幾個環境檔案,如application-dev.properties、application-uat.properties等,系統將自動通過application.properties中的spring.profiles.active=dev來選擇。