目錄:
創(chuàng)新互聯(lián)建站專注于福海企業(yè)網(wǎng)站建設(shè),響應式網(wǎng)站建設(shè),電子商務商城網(wǎng)站建設(shè)。福海網(wǎng)站建設(shè)公司,為福海等地區(qū)提供建站服務。全流程定制設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務
1.?SpringBoot集成和配置LogBack
2.?封裝LogUtil,集中處理日志
3.?SpringBoot集成LogStash
4.?單獨安裝配置LogStash
5.?docker-compose一鍵部署ELK,簡單任性
6.?常見問題和解決方法
日志在系統(tǒng)中至關(guān)重要,尤其是生產(chǎn)環(huán)境,一旦出現(xiàn)問題,首先是日志中的錯誤信息觸發(fā)預警系統(tǒng),然后通過郵件、短信甚至電話通知的方式報警給系統(tǒng)負責人。在排查修復問題階段,開發(fā)測試人員通常也要查看系統(tǒng)日志,分析故障原因。
ELK是常用的日志處理系統(tǒng),SpringBoot集成LogBack和LogStash非常方便,配置LogBack將日志發(fā)送給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已經(jīng)引入了spring-boot-starter-logging |
application.yml | 定制配置log屬性 | |
封裝LogUtil | LogUtil.java | 集中處理日志 |
LogUtilTest.java | 單元測試log輸出 | |
功能調(diào)用 | xxx.java | 調(diào)用LogUtil函數(shù),如LogUtil.info() |
1.?spring-boot-starter和spring-boot-starter-web默認引入了SLF4J和LogBack依賴。如果需要單獨引入,可在pom.xml中添加spring-boot-starter-logging
??
??
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 classLogUtilTest {
????@Test
????public voidtestLog() {
????????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.?代碼中調(diào)用LogUtil
- 調(diào)用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輸出的信息中l(wèi)ogger都是LogUtil,如果需要不同的類中使用不同的logger,那么就請在類中創(chuàng)建自己的logger:
private static finalLoggerlog= 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依賴
????
????
????
2.?在resouces目錄下添加logback.xml
????
????
????????
????????
????
????
????????
????
3.?在application.yml中引用logback.xml配置:
logging:
??config:classpath:logback.xml
四,單獨安裝配置LogStash
1.下載LogStash:https://www.elastic.co/downloads/logstash
官網(wǎng)慢時可用網(wǎng)盤:https://pan.baidu.com/s/1b-czkB8z5aL6rdxZtBmNEw?提取碼: arfb
2.?配置:在bin目錄下添加logstash.conf:
input.tcp.host可設(shè)置本機ip
input.tcp.port設(shè)置端口
output.elasticsearch.hosts設(shè)置輸出地址
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是常用的日志管理系統(tǒng),使用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實例,所以設(shè)置了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排除
????
????????
????????
????