从0开始Spring Boot - 5:日志+docker+graylog

Spring Boot 的日志模块是其核心功能之一,提供了灵活且强大的日志管理能力。Spring Boot 默认集成了多种日志框架,并允许开发者根据需求进行配置和扩展。以下是关于 Spring Boot 日志模块的详细介绍:


1. 默认日志框架

Spring Boot 默认使用 SLF4J (Simple Logging Facade for Java)作为日志门面,并结合 Logback 作为默认的日志实现框架。SLF4J 提供了统一的日志接口,而 Logback 是一个高性能的日志实现框架。

  • SLF4J:作为日志门面,SLF4J 允许开发者在不修改代码的情况下切换不同的日志实现。
  • Logback:是 Log4j 的继任者,性能优越,功能丰富,支持灵活的配置。

2. 日志级别

Spring Boot 支持以下日志级别(从低到高):

  • TRACE:最详细的日志信息,通常用于调试。
  • DEBUG:用于开发阶段的调试信息。
  • INFO:常规的运行信息,如应用程序启动、配置加载等。
  • WARN:警告信息,表示潜在的问题,但不会影响程序运行。
  • ERROR:错误信息,表示发生了需要关注的问题。
  • FATAL:严重错误,通常会导致应用程序终止(Logback 不支持 FATAL 级别,而是使用 ERROR)。

可以通过配置文件或命令行参数设置日志级别。


3. 日志配置

Spring Boot 的日志配置非常灵活,支持通过以下方式进行配置:

(1) 配置文件

Spring Boot 支持在 application.propertiesapplication.yml 中配置日志。常用的配置项包括:

  • 设置日志级别:

    properties 复制代码
    logging.level.root=INFO
    logging.level.org.springframework=DEBUG
    logging.level.com.example=TRACE
  • 指定日志文件路径:

    properties 复制代码
    logging.file.name=app.log
    logging.file.path=/var/logs
  • 配置日志格式:

    properties 复制代码
    logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
    logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

(2) Logback 自定义配置

如果需要更复杂的日志配置,可以完全绕过 Spring Boot 的默认配置,直接使用 Logback 的配置文件。只需在 src/main/resources 目录下创建 logback-spring.xml 文件即可。例如:

xml 复制代码
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

(3) 环境配置

Spring Boot 支持根据不同的环境(如开发、测试、生产)配置不同的日志行为。例如:

  • application-dev.properties 中设置更详细的日志级别:

    properties 复制代码
    logging.level.root=DEBUG
  • application-online.properties 中设置更严格的日志级别:

    properties 复制代码
    logging.level.root=WARN

4. 日志输出

Spring Boot 支持将日志输出到多种目标:

  • 控制台:默认情况下,日志会输出到控制台。
  • 文件 :通过配置 logging.file.namelogging.file.path,可以将日志输出到文件。
  • 远程服务器:通过 Logback 或 Log4j 的配置,可以将日志发送到远程服务器(如 ELK 堆栈,Graylog)。

5. 日志分组

Spring Boot 提供了日志分组功能,可以将相关的日志记录器分组并统一设置日志级别。例如:

properties 复制代码
logging.group.web=org.springframework.web, org.springframework.security
logging.level.web=DEBUG

上述配置将 org.springframework.weborg.springframework.security 分组为 web,并统一设置日志级别为 DEBUG


6. 日志与监控

Spring Boot 的日志模块可以与监控工具(如 Prometheus、Grafana)集成,实现日志的集中管理和分析。例如,通过 ELK(Elasticsearch、Logstash、Kibana)或者 Graylog 堆栈,可以实现日志的收集、存储和可视化。

我用 graylog 做个demo ,ELK 原理差不多

Spring Boot 应用配置

使用 Logback 的配置示例

logback-spring.xml 中配置 ,将日志发送到 graylog:

xml 复制代码
<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
    <graylogHost>localhost</graylogHost>
    <graylogPort>12201</graylogPort>
</appender>

<root level="debug">
    <appender-ref ref="GELF" />
</root>
添加依赖

pom.xml 中添加依赖:

xml 复制代码
<dependency>
    <groupId>de.siegmar</groupId>
    <artifactId>logback-gelf</artifactId>
    <version>6.1.1</version>
</dependency>

5. 总结

Spring Boot 与 Graylog 的集成提供了一种强大的日志管理解决方案,能够实现日志的集中收集、存储和可视化。通过 logback 的灵活配置和 Elasticsearch 的高效存储,开发者可以轻松管理和分析海量日志数据。并且继承了可视化功能进一步提升了日志分析的效率。

实操一下 - Graylog 方案

1. 安装Docker

官网下载dockerDestop ,点击安装即可,会遇到网络问题,可以配置一下源

也可以参考官网,命令行安装

2. 安装graylog

graylog 官网有提供 docker-compose.yml 的配置,当然也可以使用AI生成的,我这里使用graylog官网给的 这里有一个坑,注意不要用 graylog 的企业版还是 open edition

找到 install graylog in Docker

执行 docker-compose up

顺利进入graylog服务页面

配置完CA后,正式进入graylog

注意配置inputs,GELF UDP

对应的logback-spring.xml文件配置

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
        <graylogHost>127.0.0.1</graylogHost> <!-- Graylog服务器地址 -->
        <graylogPort>12201</graylogPort> <!-- Graylog GELF UDP端口 -->
    </appender>

    <root level="info">
        <appender-ref ref="GELF"/>
    </root>
</configuration>

顺利上传到graylog服务器,这样就不用去docker服务器里找对应的日志文件了

相关推荐
qq_13948428822 分钟前
springboot433-基于SpringBoot的流浪猫爱心救助系统(源码+数据库+纯前后端分离+部署讲解等)
java·数据库·vue.js·spring boot·后端·maven·intellij-idea
寻月隐君12 分钟前
Python 数据结构与算法:课程笔记与实战解析
后端·python·github
云雨雪25 分钟前
朋友,你也不想不懂RPC的事情被同事发现吧?(附DEMO,快来玩!)
后端·微服务·rpc
梦兮林夕31 分钟前
深入浅出 Gin 路由管理:从基础到最佳实践
后端·go·gin
Seven9738 分钟前
【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
java·后端·设计模式
奔跑中的小象40 分钟前
Deepin通过二进制方式升级部署高版本 Docker
docker·容器·eureka·deepin
梦醒沉醉1 小时前
Scala的初步使用
开发语言·后端·scala
重庆穿山甲1 小时前
建造者模式实战指南:场景案例+实战代码,新手也能快速上手
后端
小安同学iter1 小时前
Spring(七)AOP-代理模式
java·后端·spring
Goboy2 小时前
老婆问我:“大模型的 Token 究竟是个啥?”
后端·程序员·架构