如何优雅的管理 Spring Boot 日志?松哥手把手教你上 ELK!
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里–> Spring Boot+Vue+微人事视频教程
Spring Boot 如何攀上高大上的 ELK?今天松哥手把手教你将 Spring Boot 日志实时输入到 Es 中!
以下是视频笔记:
注意,笔记只是视频内容的一个简要记录,因此笔记内容比较简单,完整的内容可以查看视频。
30.1 Logstash
一个具备实时数据传输能力的管道。它可以将数据从输入端(Spring Boot 日志)传送到输出端(Es)。数据在 Logstash 中传输的过程中,可以加入过滤器 Filter,对数据进行过滤。
30.2 安装
- 可以使用 Docker 安装(不推荐)。
- 直接安装
2.1 下载 Logstash:https://www.elastic.co/cn/downloads/logstash
2.2 解压下载后的文件。
2.3 在 config 目录下,添加 logstash-springboot.conf 文件,内容如下:
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
filter {
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200","127.0.0.1:9201","127.0.0.1:9202"]
index => "log-javaboy-dev-%{+yyyy.MM.dd}"
}
}
2.4 在 config/pipelines.yml 文件中,加载 logstash-springboot.conf 配置文件:
- pipeline.id: log_dev
path.config: "/Users/sang/workspace/elasticsearch/logstash-7.10.2/config/logstash-springboot.conf"
2.5 启动 Logstash
进入到 bin 目录下,执行 ./logstash
命令启动即可(启动之前确保 Es 已经启动)。看到如下内容表示启动成功:

30.3 Spring Boot 日志
首先创建一个 Spring Boot 工程,引入 web 依赖 和 logstash 相关的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
然后在 resources 目录下创建 logback-spring.xml 文件(具体参考: Spring Boot 日志各种用法
),将日志输出到 logstash 中:
<!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="logstash"/>
<property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
<contextName>${APP_NAME}</contextName>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
最后再创建一个 HelloController 用来测试:
@RestController
public class HelloController {
private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
@GetMapping("/hello")
public void hello() {
logger.info("hello logstash!");
}
}
接下来启动 Spring Boot 工程。
30.4 Kibana
在 Kibana 中,点击创建一个索引规则:

接下来创建一个索引规则:

输入索引名称规则:

然后点击下一步,选择 @timestamp。
最后,在 discover 中可以查看日志信息。

ElasticSearch 系列其他文章: