1.搭建springboot工程,應該沒人不會搭吧络它,此步驟省略
2.添加相關(guān)依賴禾进,我用的gradle
//變量配置川队,用來定義版本號
ext {
set('springBootVersion', "2.3.2.RELEASE")
set('lombokVersion', "1.18.12")
set('logstashVersion', "6.6")
}
dependencies {
// logstash日志收集
implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: "${logstashVersion}"
//web依賴
compile 'org.springframework.boot:spring-boot-starter-web'
//除了用來生成getter,setter,還用來使用@Slf4j注解
compile "org.projectlombok:lombok:${lombokVersion}"
annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
}
spring-boot-starter-web依賴說明:
主要是因為web依賴中包含 spring-boot-starter-logging
項目中正好需要使用web系枪,就只導了web雀哨,如果不需要web依賴,則需要導入spring-boot-starter-logging
3.項目resourses目錄下添加logback.xml配置文件,配置內(nèi)容如下雾棺,注意修改logstash地址
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--獲取springboot的yml配置信息-->
<springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="default"/>
<!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
<property name="LOG_HOME" value="/home"/>
<!--輸出到控制臺-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<withJansi>false</withJansi>
<encoder>
<!--<pattern>%d %p (%file:%line\)- %m%n</pattern>-->
<!--格式化輸出:%d:表示日期 %thread:表示線程名 %-5level:級別從左顯示5個字符寬度 %msg:日志消息 %n:是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) -- %boldMagenta([%thread]) %boldCyan(%logger) : %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志發(fā)送至logstash -->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- logstash的服務器地址和通信端口 -->
<destination>192.168.81.120:5043</destination>
<!-- encoder is required -->
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 在elasticsearch的index中追加applicationName字段 -->
<customFields>{"applicationName":"${applicationName}"}</customFields>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件輸出的文件名-->
<FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天數(shù)-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期膊夹,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息垢村,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志輸出級別 -->
<root level="INFO">
<appender-ref ref="logstash"/>
<appender-ref ref="console"/>
</root>
</configuration>
xml的關(guān)鍵在于logstash的appender割疾,和root節(jié)點使用哪一個appender
<!-- 如果需要使用application.yml配置logstash的服務器地址,則使用如下方式配置 -->
<springProperty scope="context" name="logstashSrvAddr" source="logstash.server.addr" defaultValue="default"/>
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!-- logstash的服務器地址和通信端口 -->
<destination>${logstashSrvAddr}</destination>
<!-- encoder is required -->
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 在elasticsearch的index中追加applicationName字段 -->
<customFields>{"applicationName":"${applicationName}"}</customFields>
</encoder>
</appender>
4.關(guān)鍵配置信息已經(jīng)全部配置完成嘉栓,接下來編寫一個controller測試一下
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Torture
* @description 測試elk
*/
@RestController
@Slf4j
public class LogController {
@GetMapping("/log")
public void log(){
//使用lombok的@Slf4j注解之后宏榕,可以直接使用下面方式直接打印日志,無須使用工廠獲得logger對象
log.info("springboot + elk 日志測試......");
}
}
5.啟動springboot
6.配置一下kibana的索引模式
配置過程:
7.使用postman進行日志測試
idea控制臺輸出結(jié)果:
在kibana中我們可以發(fā)現(xiàn)侵佃,日志已經(jīng)成功展示出來了麻昼!
下面我們再測試一下error日志下,logstash是怎么展示的馋辈!
測試類:
import com.zxj.qdzc.common.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Torture
* @description 測試elk
*/
@RestController
@Slf4j
public class LogController {
@GetMapping("/errorLog")
public void log(){
Exception e = new ServiceException("springboot + elk 錯誤日志測試......");
log.error(e.getMessage(),e);
}
}
使用postman請求error日志:
idea控制臺輸出結(jié)果:
kibana展示error日志:
展開詳情看看抚芦,發(fā)現(xiàn)連錯誤日志的堆棧信息都打印出來了,妙奥趺叉抡!
8.最后我們再來使用kibana篩選一下日志級別
點擊添加篩選按鈕:
我們來篩選一下error日志:
篩選結(jié)果:
至此,springboot 整合 elk的教程完結(jié)撒花答毫!
轉(zhuǎn)載請說明出處褥民!
上一篇:springboot + elk第三篇:docker部署logstash