Spring Boot教學
Spring Boot是什麼?
Spring Boot簡介
Spring Boot主要目標
Spring Boot快速入門
新項目爲什麼需要Spring Boot?
Spring Boot引導過程
Spring Boot核心和限制
Spring Boot Tomcat部署
Spring Boot優點和缺點
Spring Boot構建系統
Spring Boot入門
Spring Boot代碼結構
Spring Boot安裝
Spring Boot Bean和依賴注入
Spring Boot應用程序開發入門
Spring Boot運行器(Runner)
Spring Boot JSP應用實例
Spring Boot應用程序屬性
Spring Boot將WAR文件部署到Tomcat
Spring Boot日誌
Spring Boot Hello World(Thymeleaf)示例
Spring Boot構建RESTful Web服務
Spring Boot非web應用程序實例
Spring Boot異常處理
Spring Boot @ConfigurationProperties實例
Spring Boot攔截器
Spring Boot SLF4J日誌實例
Spring Boot Servlet過濾器
Spring Boot Ajax實例
Spring Boot Tomcat端口號
Spring Boot文件上傳示例(Ajax和REST)
Spring Boot Rest模板
Spring Boot文件上傳示例
Spring Boot文件處理
Spring Boot服務組件
Spring Boot Thymeleaf示例
Spring Boot使用RESTful Web服務
Spring Boot CORS支持
Spring Boot國際化
Spring Boot調度
Spring Boot啓用HTTPS
Spring Boot Eureka服務器
Spring Boost Eureka服務註冊
Spring Boot Zuul代理服務器和路由
Spring Boot雲配置服務器
Spring Boot雲配置客戶端
Spring Boot Actuator
Spring Boot管理服務器
Spring Boot管理客戶端
Spring Boot啓用Swagger2
Spring Boot創建Docker鏡像
Spring Boot跟蹤微服務日誌
Spring Boot Flyway數據庫
Spring Boot發送電子郵件
Spring Boot Hystrix
Spring Boot Web Socket
Spring Boot批量服務
Spring Boot Apache Kafka
Spring Boot單元測試用例
Spring Boot Rest控制器單元測試
Spring Boot數據庫源(連接數據庫)
Spring Boot保護Web應用程序

Spring Boot跟蹤微服務日誌

如果應用程序在運行過程發生問題,大多數開發人員都難以跟蹤日誌。 這可以通過用於Spring Boot應用程序的Spring Cloud Sleuth和ZipKin服務器來解決。

Spring Cloud Sleuth

Spring cloud Sleuth日誌以下列格式打印 -

[application-name,traceid,spanid,zipkin-export]

在上面格式中,

Application-name = 應用程序的名稱
Traceid = 每個請求和響應traceid在調用相同服務或一個服務到另一個服務時是相同的。
Spanid = Span Id與Trace Id一起打印。對於將一個服務調用到另一個服務的每個請求和響應,Span Id都不同。
Zipkin-export = 默認情況下爲false。 如果是,則將日誌導出到Zipkin服務器。

現在,在構建配置文件中添加Spring Cloud Starter Sleuth依賴項,如下所示 -

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

Gradle用戶可以在build.gradle 文件中添加以下依賴項 -

compile('org.springframework.cloud:spring-cloud-starter-sleuth')

現在,將Logs添加到Spring Boot應用程序Rest Controller類文件中,如下所示 -

package com.yiibai.sleuthapp;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class SleuthappApplication {
   private static final Logger LOG = Logger.getLogger(SleuthappApplication.class.getName());
   public static void main(String[] args) {
      SpringApplication.run(SleuthappApplication.class, args);
   }
   @RequestMapping("/")
   public String index() {
      LOG.log(Level.INFO, "Index API is calling");
      return "Welcome Sleuth!";
   }
}

現在,在application.properties 文件中添加應用程序名稱,如下所示 -

spring.application.name = tracinglogs

構建配置文件的完整代碼如下 -

Maven構建文件 - pom.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>
   <groupId>com.yiibai</groupId>
   <artifactId>sleuthapp</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>sleuthapp</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.9.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-sleuth</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

Gradle構建文件:build.gradle -

buildscript {
   ext {
      springBootVersion = '1.5.9.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.yiibai'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
ext {
   springCloudVersion = 'Edgware.RELEASE'
}
dependencies {
   compile('org.springframework.cloud:spring-cloud-starter-sleuth')
   compile('org.springframework.boot:spring-boot-starter-web')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
   imports {
      mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
   }
}

可以創建可執行的JAR文件,並使用以下Maven或Gradle命令運行Spring Boot應用程序。

對於Maven,可以使用以下命令 -

mvn clean install

「BUILD SUCCESS」 之後,可以在目標目錄下找到JAR文件。

對於Gradle,可以使用以下命令 -

gradle clean build

「BUILD SUCCESSFUL」 之後,可以在build/libs 目錄下找到JAR文件。

現在,使用以下命令運行JAR文件 -

java –jar <JARFILE>

現在,在Web瀏覽器中的URL => http://localhost:8080/ ,然後在控制檯日誌中查看輸出。
Spring

在控制檯窗口中看到以下日誌,日誌以下列格式打印[application-name,traceid,spanid,zipkin-export]
Spring

Zipkin服務器

Zipkin是一個監視和管理Spring Boot應用程序的Spring Cloud Sleuth日誌的應用程序。 要構建Zipkin服務器,需要在構建配置文件中添加Zipkin UI和Zipkin Server依賴項。

Maven用戶可以在pom.xml 文件中添加以下依賴項 -

<dependency>
   <groupId>io.zipkin.java</groupId>
   <artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
   <groupId>io.zipkin.java</groupId>
   <artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>

Gradle用戶可以在build.gradle 文件中添加以下依賴項 -

compile('io.zipkin.java:zipkin-autoconfigure-ui')
compile('io.zipkin.java:zipkin-server')

現在,在應用程序屬性文件中配置server.port = 9411
對於屬性(properties)文件用戶,請在application.properties文件中添加以下屬性。

server.port = 9411

對於YAML用戶,請在application.yml 文件中添加以下屬性。

server:
   port: 9411

在主Spring Boot應用程序類文件中添加[@EnableZipkinServer](https://github.com/EnableZipkinServer "@EnableZipkinServer")註解。[@EnableZipkinServer](https://github.com/EnableZipkinServer "@EnableZipkinServer")註釋用於使應用程序充當Zipkin服務器。

package com.yiibai.zipkinapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.EnableZipkinServer;

@SpringBootApplication
@EnableZipkinServer
public class ZipkinappApplication {
   public static void main(String[] args) {
      SpringApplication.run(ZipkinappApplication.class, args);
   }
}

完整構建配置文件的代碼如下所示。
Maven構建文件 - pom.xml -

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>
   <groupId>com.yiibai</groupId>
   <artifactId>zipkinapp</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>zipkinapp</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.9.RELEASE</version>
      <relativePath /> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>io.zipkin.java</groupId>
         <artifactId>zipkin-server</artifactId>
      </dependency>
      <dependency>
         <groupId>io.zipkin.java</groupId>
         <artifactId>zipkin-autoconfigure-ui</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>

Gradle構建文件 – build.gradle 的內容如下:

buildscript {
   ext {
      springBootVersion = '1.5.9.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.yiibai'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
ext {
   springCloudVersion = 'Edgware.RELEASE'
}
dependencies {
   compile('io.zipkin.java:zipkin-autoconfigure-ui')
   compile('io.zipkin.java:zipkin-server')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
   imports {
      mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
   }
}

可以創建一個可執行的JAR文件,並使用下面的Maven或Gradle命令運行Spring Boot應用程序 -
對於Maven,請使用下面給出的命令 -

mvn clean install

在「BUILD SUCCESS」之後,可以在target目錄下找到JAR文件。

對於Gradle,請使用下面給出的命令 -

gradle clean build

在「BUILD SUCCESSFUL」之後,可以在build/libs目錄下找到JAR文件。

使用顯示的命令運行JAR文件 -

java –jar <JARFILE>

現在,應用程序已在Tomcat端口9411上啓動。

現在,訪問URL => http://localhost:9411/zipkin/ ,並查看Zipkin服務器UI。

然後,在客戶端服務應用程序中添加以下依賴項,並指出Zipkin Server URL以通過Zipkin UI跟蹤微服務日誌。
Spring

現在,在構建配置文件中添加Spring Cloud Starter Zipkin依賴項,如下所示 -

Maven用戶可以在pom.xml 文件中添加以下依賴項 -

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

Gradle用戶可以在build.gradle 文件中添加以下依賴項 -

compile('org.springframework.cloud:spring-cloud-sleuth-zipkin')

現在,在Spring Boot應用程序中添加Always Sampler Bean,將日誌導出到Zipkin服務器。

@Bean
public AlwaysSampler defaultSampler() {
   return new AlwaysSampler();
}

如果添加AlwaysSampler Bean,則自動Spring Sleuth Zipkin Export選項將從false更改爲true

接下來,在客戶端服務application.properties 文件中配置Zipkin Server基本URL。

spring.zipkin.baseUrl = http://localhost:9411/zipkin/

然後,提供跟蹤ID並在Zipkin UI中查找跟蹤。

http://localhost:9411/zipkin/traces/{traceid}/