安装ELK这里不再赘述了,docker安装最简单
springboot引入logstash-logback-encoder
maven
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.2</version>
</dependency>
gradle
dependencies {
implementation 'net.logstash.logback:logstash-logback-encoder:7.2'
}
resources文件夹下创建logback-spring.xml(必须是这个名字)
linux记得开放4560端口
<configuration>
<jmxConfigurator/>
<!-- 控制台输出日志 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}] [%thread] [%magenta(%level)] %green([%logger]) >>> %cyan(%msg) %n
</pattern>
</encoder>
</appender>
<!--输出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集ip:port-->
<destination>192.168.18.111:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
创建测试类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
private static final Logger log = LoggerFactory.getLogger(TestController.class);
@GetMapping("hello")
public String hello(){
log.info("测试日志是否输出到logstash");
return "hello";
}
}
启动spring boot项目访问hello接口
控制台打印信息如下
[2022-07-27 16:35:07] [INFO] [TestController] >>> 测试日志是否输出到logstash
[2022-07-27 16:35:11] [INFO] [TestController] >>> 测试日志是否输出到logstash
[2022-07-27 16:35:12] [INFO] [TestController] >>> 测试日志是否输出到logstash
访问kibana
这里要选时间,默认15分钟之前到现在的数据,否则查询的时候可能没有数据,这里选择一年前的即可