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 页面查看了。