【从0开始Web开发实战】SpringBoot集成LogBack和LogStash
admin
2023-02-20 16:20:06
0

目录:

1. SpringBoot集成和配置LogBack

2. 封装LogUtil,集中处理日志

3. SpringBoot集成LogStash

4. 单独安装配置LogStash

5. docker-compose一键部署ELK,简单任性

6. 常见问题和解决方法


日志在系统中至关重要,尤其是生产环境,一旦出现问题,首先是日志中的错误信息触发预警系统,然后通过邮件、短信甚至电话通知的方式报警给系统负责人。在排查修复问题阶段,开发测试人员通常也要查看系统日志,分析故障原因。


ELK是常用的日志处理系统,SpringBoot集成LogBack和LogStash非常方便,配置LogBack将日志发送给LogStash。

【从0开始Web开发实战】SpringBoot集成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


  org.springframework.boot
  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集中处理日志

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash 


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依赖


    net.logstash.logback
    logstash-logback-encoder
    5.1

2. resouces目录下添加logback.xml

xml version="1.0" encoding="UTF-8"?>

    resource="org/springframework/boot/logging/logback/base.xml"/>

    name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        127.0.0.1:9600
        charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    


    level="INFO">
        ref="LOGSTASH"/>
    

3. application.yml中引用logback.xml配置:

logging:
  config: classpath:logback.xml


四,单独安装配置LogStash

1. 下载LogStashhttps://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,看到端口信息提示,运行成功

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

4. 运行Spring项目LogStash将收到日志信息

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash 

五,docker-compose一键部署ELK

ELK是常用的日志管理系统,使用Docker-compose一键部署,省去安装配置的繁琐步骤。

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

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查看:

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

5. up.sh启动容器

脚本中封装了docker-compose up -d命令,启动后运行docker ps查看容器实例:

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

6. logs.sh查看ELK运行日志

定制命令突出显示重要信息:

docker-compose logs -ft | grep --color -i -e error -e warn -e version -e exception

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

7. down.sh停止服务

docker-compose down --remove-orphans停止并删除容器:

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

8. 查看ELK服务:

- elasticsearch:

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

- logstsh:

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

- kibana:

【从0开始Web开发实战】SpringBoot集成LogBack和LogStash

使用docker-compose一键部署ELK,就是这么简单任性。


五,常见问题和解决方法

多个log框架冲突,项目启动时出现信息:SLF4J: Class path contains multiple SLF4J bindings

原因:项目依赖的jar包中引入了别的log框架比如log4j

解决:pom.xml中引入依赖时配置exclude,将不需要的log4j排除


    
        org.slf4j
        slf4j-log4j12
    


相关内容

热门资讯

浏阳爆炸烟花厂800亩厂房被夷... 湖南长沙市浏阳市华盛烟花制造燃放有限公司5月4日发生爆炸,截至目前已造成26人遇难、61人受伤。凤凰...
天然气炉子火太小是什么原因 天然气炉子火太小是什么原因要先排除是因为燃气灶之外的第三方原因造成的,比如说,使用的时候是用气高峰期...
煤气灶电池几号 不同型号的煤气灶可能需要不同型号的电池,常见的煤气灶电池型号有 1 号、2 号、5 号和 7 号。如...
煤气灶烧一会自动熄火两灶多会熄... 原因可能是燃起不足,供应不了两个煤气灶,可以关闭一个,若是一个也供应不上就需要补充煤气了;原因可能是...
燃气灶成黄火是什么原因 燃气灶成黄火的原因有很多,主要是以下几个方面:1. 气体供应不足:使用燃气灶时,如果气体供应不足,即...
燃气灶风门调到最大还是黄火怎么... 原因是燃气质量不稳定,燃气灶一次性空气量供给不足,导致燃烧不良生成黄焰火,还有可能是因为燃气灶的风门...
以青春之我 创青春中国 湖北武汉市,光谷实验室研究员张静宇聚力飞秒激光前沿赛道,突破技术壁垒,提升单张玻璃光盘的理论容量; ...
追觅科技全球发布会周收官 集中... 美国时间4月27日至30日,以“DREAME NEXT”为主题的追觅科技全球发布会周在硅谷收官。 四...
后退的阶梯:我在互联网公司的1... 如果说,张小满的前一本书《我的母亲做保洁》提供给公众一个刻下罕见的“劳动者视角”,那么此番《大厂小民...