您好,登錄后才能下訂單哦!
目錄:
1.?SpringBoot集成和配置LogBack
2.?封裝LogUtil,集中處理日志
3.?SpringBoot集成LogStash
4.?單獨安裝配置LogStash
5.?docker-compose一鍵部署ELK,簡單任性
6.?常見問題和解決方法
日志在系統中至關重要,尤其是生產環境,一旦出現問題,首先是日志中的錯誤信息觸發預警系統,然后通過郵件、短信甚至電話通知的方式報警給系統負責人。在排查修復問題階段,開發測試人員通常也要查看系統日志,分析故障原因。
ELK是常用的日志處理系統,SpringBoot集成LogBack和LogStash非常方便,配置LogBack將日志發送給LogStash。
?
代碼下載:https://github.com/jextop/StarterApi/
一,SpringBoot集成和配置LogBack
SpringBoot默認使用SLF4J和LogBack,可在application.yml中定制配置。
代碼文件 | 功能要點 | |
SpringBoot集成SLF4J和LogBack | pom.xml | 引入log依賴:spring-boot-starter-logging,注:spring-boot-starter和spring-boot-starter-web已經引入了spring-boot-starter-logging |
application.yml | 定制配置log屬性 | |
封裝LogUtil | LogUtil.java | 集中處理日志 |
LogUtilTest.java | 單元測試log輸出 | |
功能調用 | xxx.java | 調用LogUtil函數,如LogUtil.info() |
1.?spring-boot-starter和spring-boot-starter-web默認引入了SLF4J和LogBack依賴。如果需要單獨引入,可在pom.xml中添加spring-boot-starter-logging
<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
2.?在application.yml中定制配置log屬性:
logging.level:指定package的輸出日志級別,可選:debug, info, warn, error
logging.file.path:指定日志文件路徑
logging.file.max-size:指定單個文件大小,超過時將滾動生成多個文件
logging.file.max-history:指定歸檔日志文件保留的最長歷史記錄
logging.pattern.console:輸出到console工作臺的日志格式
logging.pattern.file:輸出到日志文件的格式
logging:
??level:
????com.starter: info
??file:
????path: logs
????max-size: 10MB
????max-history: 7
??pattern:
????console: "%d %-5level [%thread] %logger : %msg%n"
????file: "%d %-5level [%thread] %logger : %msg%n"
二,封裝LogUtil.java集中處理日志
1. LogUtil集中處理日志
?
2. 單元測試LogUtil
@SpringBootTest(classes = StarterApplication.class)
public class LogUtilTest {
????@Test
????public void testLog() {
????????LogUtil.debug("debug", "message.");
????????LogUtil.info("info", "message.");
????????LogUtil.warn("warn", "message.");
????????LogUtil.error("error", "message.");
????}
}
輸出日志:
2020-01-31 14:21:13,796 INFO ?[main] com.common.util.LogUtil : info, message.
2020-01-31 14:21:13,796 WARN ?[main] com.common.util.LogUtil : warn, message.
2020-01-31 14:21:13,796 ERROR [main] com.common.util.LogUtil : error, message.
3.?代碼中調用LogUtil
- 調用LogUtil.info(“xxx”)
??LogUtil.info("Check cache to set str", key, str);
- Console工作臺和日志文件輸出:
2020-01-31 14:19:02,438 INFO ?[http-nio-8011-exec-2] com.common.util.LogUtil : Check cache to set str, cache_test_192.168.3.9_200131014871354985900257_緩存, cache_test_192.168.3.9_200131014871354985900257_緩存
注意:LogUtil輸出的信息中logger都是LogUtil,如果需要不同的類中使用不同的logger,那么就請在類中創建自己的logger:
private static final Logger log = LoggerFactory.getLogger(LogUtil.class);
三,SpringBoot集成LogStash
代碼文件 | 功能要點 | |
SpringBoot集成LogStash | pom.xml | 引入LogStash依賴:logstash-logback-encoder |
logback.xml | 配置LogStash日志格式 | |
application.yml | 引用logback.xml配置 | |
啟動LogStash | 安裝包bin目錄 | 配置logstash.conf,啟動logstash -f logstash.conf |
1.?在pom.xml中添加LogStash依賴
<dependency>
????<groupId>net.logstash.logback</groupId>
????<artifactId>logstash-logback-encoder</artifactId>
????<version>5.1</version>
</dependency>
2.?在resouces目錄下添加logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
????<include resource="org/springframework/boot/logging/logback/base.xml"/>
????<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
????????<destination>127.0.0.1:9600</destination>
????????<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
????</appender>
????<root level="INFO">
????????<appender-ref ref="LOGSTASH"/>
????</root>
</configuration>
3.?在application.yml中引用logback.xml配置:
logging:
??config: classpath:logback.xml
四,單獨安裝配置LogStash
1. 下載LogStash:https://www.elastic.co/downloads/logstash
官網慢時可用網盤:https://pan.baidu.com/s/1b-czkB8z5aL6rdxZtBmNEw?提取碼: arfb
2.?配置:在bin目錄下添加logstash.conf:
input.tcp.host可設置本機ip
input.tcp.port設置端口
output.elasticsearch.hosts設置輸出地址
input{
????tcp {
????????mode => "server"
????????host => "0.0.0.0"
????????port => 9600
????????codec => json_lines
????}
}
output{
????stdout{
???????codec => rubydebug
????}
????elasticsearch {
???????hosts => ["elasticsearch:9200"]
????}
}
3.?啟動:logstash -f logstash.conf,看到端口信息提示,運行成功
4.?運行Spring項目,LogStash將收到日志信息
?
五,docker-compose一鍵部署ELK
ELK是常用的日志管理系統,使用Docker-compose一鍵部署,省去安裝配置的繁瑣步驟。
1.?Docker安裝:
https://docs.docker.com/install/linux/docker-ce/ubuntu/
https://docs.docker.com/docker-for-windows/install/
2.?腳本下載:
https://github.com/rickding/HelloDocker/tree/master/elk
├── docker-compose.yml
├── pull.sh
├── up.sh
├── logs.sh
├── down.sh
3.?docker-compose.yml腳本配置ELK服務:
logstash和kibana需要連接elasticsearch實例,所以設置了depends_on屬性。
version: '3'
services:
????elasticsearch:
????????hostname: elasticsearch
????????image: elasticsearch:latest
????????ports:
????????????- 9200:9200
????????????- 9300:9300
????log:
????????image: registry.cn-shanghai.aliyuncs.com/hellodock/logstash:latest
????????ports:
????????????- 9600:9600
????????????- 9601:9601
????????depends_on:
????????????- elasticsearch
????kibana:
????????image: registry.cn-shanghai.aliyuncs.com/hellodock/kibana:latest
????????ports:
????????????- 5601:5601
????????depends_on:
????????????- elasticsearch
4.?pull.sh拉取鏡像
可直接運行docker pull elasticsearch:latest拉取鏡像,docker images查看:
5.?up.sh啟動容器
腳本中封裝了docker-compose up -d命令,啟動后運行docker ps查看容器實例:
6.?logs.sh查看ELK運行日志
定制命令突出顯示重要信息:
docker-compose logs -ft | grep --color -i -e error -e warn -e version -e exception
7.?down.sh停止服務
docker-compose down --remove-orphans停止并刪除容器:
8.?查看ELK服務:
- elasticsearch:
- logstsh:
- kibana:
使用docker-compose一鍵部署ELK,就是這么簡單任性。
五,常見問題和解決方法
原因:項目依賴的jar包中引入了別的log框架比如log4j
解決:pom.xml中引入依賴時配置exclude,將不需要的log4j排除
<exclusions>
????<exclusion>
????????<groupId>org.slf4j</groupId>
????????<artifactId>slf4j-log4j12</artifactId>
????</exclusion>
</exclusions>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。