Spring Boot项目将日志输出至ELK编码实践
承接前文,ELK
日志中心已经搭建和启动完毕,本节笔者将讲解如何将程序中的日志信息输出到 ELK
,以及如何在 Kibana
中配置和查看日志信息。
Java
工程对接 ELK
日志中心并不复杂,这里笔者先在一个普通的 Spring Boot
项目中进行编码,把日志输出到 ELK
日志中心,接入成功后,再进行 Spring Cloud Alibaba
微服务架构项目的改造。
本节代码是在第 4 章 Spring Boot
演示项目的基础上修改的,目录结构如图 13-13 所示。

具体编码步骤如下。
-
引入
logstash-logback-encoder
依赖。打开
pom.xml
文件,在dependencies
节点下新增logstash-logback-encoder
的依赖项,配置代码如下:<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>7.0.1</version> </dependency>
这里使用了 7.0.1 版本,并没有使用更高的版本,因为当前的 Spring Boot 版本为 2.6.3,使用高版本的
logstash-logback-encoder
会报错。 -
添加
Logback
日志配置文件。在项目的
src/main/resources
目录下创建logback.xml
配置文件,在这个文件中定义两个Appender
用来输出日志信息,代码如下:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml"/> <!--应用名称--> <property name="APP_NAME" value="newbee - mall - elk - log"/> <contextName>${APP_NAME}</contextName> <!-- 控制台的日志输出样式 --> <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy - MM - dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <!-- 日志输出编码 --> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>utf8</charset> </encoder> </appender> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>192.168.110.57:4560</destination> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/> </appender> <root level="DEBUG"> <appender-ref ref="CONSOLE"/> <appender-ref ref="LOGSTASH"/> </root> </configuration>
第一个
Appender
是ConsoleAppender
,名称为CONSOLE
,它可以将日志信息打印到控制台上,日志级别为Debug
。第二个
Appender
是LogstashTcpSocketAppender
,名称为LOGSTASH
。因为在ELK
日志中心配置时已经指定了Logstash
实例使用TCP
的方式接收日志信息,所以这个Appender
会将日志信息输出到Logstash
。 -
新增日志输出的测试代码。
在
ltd.newbee.mall.controller
包中新建ELKTestController
类,并新增如下代码:package ltd.newbee.mall.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class ELKTestController { private static final Logger log = LoggerFactory.getLogger(ELKTestController.class); @GetMapping("/elk-logs") @ResponseBody public String elkTest() { log.debug("DEBUG 级别日志输出 --> ELK"); log.info("INFO 级别日志输出 --> ELK"); log.error("ERROR 级别日志输出 --> ELK"); return "hello,elk!"; } }
在浏览器的地址栏中访问 /elk-logs
的 IP
地址,会输出三条不同级别的测试日志。
最终的代码目录结构如图 13-14 所示。

ELK
日志中心搭建完成后,如果在 Java
工程中想要接入 ELK
日志中心,只需要做两处改动就可以了,一处是添加依赖项,另一处是添加 Logback
配置文件。
至此,将日志输出至 ELK
编码就完成了。接下来,启动这个 Spring Boot
项目即可,日志成功输出后就能够在 Kibana
页面查看了。