从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服务器里找对应的日志文件了

相关推荐
IT_陈寒12 分钟前
Redis持久化这个坑,我爬了一整天才出来
前端·人工智能·后端
无风听海12 分钟前
多租户系统中的 OIDC:Discovery 端点与联合登录的深度实践
后端·python·flask
小小前端仔LC1 小时前
Node.js + LangChain + React:搭建个人知识库(六)- “吃什么”项目实战:从700+菜谱入库到Taro H5端JSON渲染
前端·后端
程序员黑豆1 小时前
AI全栈开发之Java:怎么配置Java环境变量
前端·后端·ai编程
苍何2 小时前
一手实测 Claude Fable 5,手搓了个 Obsidian 的 Codex 插件
后端
极客先躯2 小时前
高级java每日一道面试题-2026年02月02日-实战篇[Docker]-如何实现容器的持久化存储?
docker·容器·面试宝典·持久化·存储·韵味·java高级面试题
swipe2 小时前
做多轮对话 Agent,为什么我建议把短期记忆放到 Redis
后端·面试·llm
程序员黑豆3 小时前
AI全栈开发之Java:什么是JDK
前端·后端·ai编程
My is 李豆3 小时前
CentOS 7 安装 Docker 完整教程(含 docker-compose 插件)
docker·eureka·centos
阿明在折腾3 小时前
从Canvas到AI模型:我在线工具站里的图片处理实战
前端·后端