当前位置: 首页 > news >正文

Spring boot集成log4j及日志配置详解,实战,ELK使用教程。

目录

    • 引言
    • 一、SpringBoot 集成 Log4j
      • 1. 添加 Log4j 依赖
      • 2. 移除默认的Logback组件
      • 3. 创建 Log4j 配置文件
      • 4. 配置 Log4j2 日志文件
    • 二、Log4j2 XML 文件配置详解
      • 基本结构
      • Appenders 配置详解
      • Loggers 配置详解
    • 三、日志的作用
    • 四、日志数据采集与分析
      • 1. 日志数据采集
      • 2. 日志数据分析
      • 实践案例
    • 结语

引言

日志系统是非常重要的,常用于日常问题排查及数据分析统计等。我们将介绍如何在 SpringBoot 项目中集成 Log4j,并对 Log4j 配置文件(XML格式)的各种配置进行详细讲解。


一、SpringBoot 集成 Log4j

之所以使用log4j,是因为log4j在高并发的场景下的表现相对比较优异,配置灵活且可靠,是目前市面上呗最广泛使用的日志组件。

1. 添加 Log4j 依赖

首先,你需要在 pom.xml 文件中添加 Log4j 的 Maven 依赖。以下是一个典型的依赖配置:

<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Log4j Dependency --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>
</dependencies>

2. 移除默认的Logback组件

由于Spring Boot默认使用Logback,Logback的性能方面弱于Log4j,对性能要求不是非常高的系统也可以采用Logback。我们需要移除src/main/resources 目录下的logback-spring.xml文件。

3. 创建 Log4j 配置文件

src/main/resources 目录下创建一个名为 log4j2.xml 的配置文件。

4. 配置 Log4j2 日志文件

以下是一个基本的 Log4j2 XML 配置文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/></Console><File name="File" fileName="logs/app.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/></File><RollingFile name="RollingFile" fileName="logs/rolling.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayout><pattern>%d %p %c{1.} [%t] %m%n</pattern></PatternLayout><Policies><TimeBasedTriggeringPolicy /><SizeBasedTriggeringPolicy size="10MB"/></Policies></RollingFile></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/><AppenderRef ref="File"/><AppenderRef ref="RollingFile"/></Root></Loggers>
</Configuration>

二、Log4j2 XML 文件配置详解

基本结构

  • <Configuration>: 根标签,包含所有的配置。
  • <Appenders>: 定义日志输出源,例如控制台、文件等。
  • <Loggers>: 定义日志记录器,可以为不同的包或类设置不同的日志级别和输出目标。

Appenders 配置详解

Appenders配置主要是用于控制日志的输出位置的,主要有控制台、文件等位置。

  • Console Appender: 输出日志到控制台。
<Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</Console>
  • File Appender: 输出日志到文件。
<File name="File" fileName="logs/app.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</File>
  • RollingFile Appender: 输出日志到文件,并且支持文件滚动。
<RollingFile name="RollingFile" fileName="logs/rolling.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayout><Pattern>%d %p %c{1.} [%t] %m%n</Pattern></PatternLayout><Policies><TimeBasedTriggeringPolicy /><SizeBasedTriggeringPolicy size="10MB"/></Policies>
</RollingFile>

Loggers 配置详解

  • Root Logger: 定义全局的日志级别和输出目的地。下面的例子表示全局日志的级别为info,并同时输出到Console、File、RollingFile三个位置。
<Root level="info"><AppenderRef ref="Console"/><AppenderRef ref="File"/><AppenderRef ref="RollingFile"/>
</Root>

如果你想要将指定文件的输出级别和日志输出位置,可以参考下方配置:
使用Logger指定类的全限定名,指定level为debug,并将日志输出到RollingDemoFile,最终日志就会输出到logs/demo.log文件中。

  • PatternLayout: 用于定义日志文件名,使用对应的占位符输出日期时间等

各占位符详解
%d: 显示当前日志的时间和日期,默认格式是 ISO8601,可以自定义日期时间格式,例如 %d{yyyy-MM-dd HH:mm:ss}。
%p: 显示日志级别,类似 DEBUG, INFO, WARN, ERROR, FATAL。
%c{1.}: 显示日志记录器的类别名(一般是类的全名)。 {1.} 表示级别数,只显示类名不包含包名。如果指定 {2.}, 则显示包名的最后两段和类名,如 com.example.ClassName。
%t: 显示记录该日志的线程名称。
%m: 显示日志消息内容。
%n: 换行符,根据操作系统不同会自动选择合适的换行符。

  • Policies: 用于定义日志文件的分割条件,按照日志大小或者时间等
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><RollingFile name="RollingDemoFile" fileName="logs/demo.log"filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"><PatternLayout><Pattern>%d %p %c{1.} [%t] %m%n</Pattern></PatternLayout><Policies><TimeBasedTriggeringPolicy /><SizeBasedTriggeringPolicy size="10MB"/></Policies></RollingFile></Appenders><Loggers><!-- 为某个类单独设置日志级别和输出目标 --><Logger name="com.example.DemoClass" level="debug" additivity="false"><AppenderRef ref="RollingDemoFile"/></Logger><Root level="info"><AppenderRef ref="Console"/><AppenderRef ref="File"/><AppenderRef ref="RollingFile"/></Root></Loggers>
</Configuration>

三、日志的作用

日志在软件开发中具有重要作用,主要表现在以下几个方面:

  1. 故障排查:通过日志,可以追踪到应用程序中的异常和错误,便于开发人员进行故障排查。
  2. 性能监控:日志记录可以帮助监控应用程序的性能,识别出性能瓶颈和优化点。
  3. 审计:日志记录用户操作行为,可以用于审计和安全检查。
  4. 调试:在开发过程中,日志是调试程序的有力工具,便于发现问题和优化代码。

四、日志数据采集与分析

1. 日志数据采集

在现代分布式系统中,日志数据的采集往往依赖于一些专业的日志管理系统,如 ELK(Elasticsearch, Logstash, Kibana)堆栈或 Graylog。

  • Filebeat:轻量级日志转发工具,主要用于将日志文件中的数据转发至 Logstash 或 Elasticsearch。
  • Logstash:数据处理管道工具,可以从多种来源接收数据并转发到不同的目标,如 Elasticsearch。
  • Fluentd:区别于 Logstash 的开源数据收集工具,拥有丰富的输入和输出插件。

2. 日志数据分析

日志数据采集后,我们可以使用强大的分析工具进行数据分析:

  • Elasticsearch:分布式搜索和分析引擎,适用于海量日志数据的存储和检索。
  • Kibana:Elasticsearch 的可视化工具,提供强大的数据分析功能,可以创建各种图表和仪表盘,实时展示日志数据。

实践案例

以下是一个ELK堆栈的简单使用案例:

  1. Filebeat 配置:创建 filebeat.yml 文件,将日志文件输送至 Logstash:
filebeat.inputs:
- type: logpaths:- /path/to/your/logs/*.logoutput.logstash:hosts: ["logstash:5044"]
  1. Logstash 配置:创建 logstash.conf 文件,接收 Filebeat 发送的日志并存储到 Elasticsearch:
input {beats {port => 5044}
}filter {# 可以添加一些滤镜,例如解析日志格式
}output {elasticsearch {hosts => ["elasticsearch:9200"]index => "your-log-index-%{+YYYY.MM.dd}"}
}
  1. Kibana 配置:通过 Kibana UI 创建索引模式,在仪表盘上查看和分析日志数据。

通过上述方式,我们可以实现对 SpringBoot 项目日志的全面采集与分析,有效提高系统的可维护性和性能监控能力。


结语

在这篇博客中,我们详细介绍了如何在 SpringBoot 项目中集成 Log4j 以及 Log4j 配置文件的各种配置方法。通过合理地配置日志系统,我们能够更好地进行故障排查、性能监控和安全审计。进一步地,通过日志数据采集和分析工具,我们能够实现对日志数据的深度挖掘,为我们的应用提供了更便捷的数据可视化等支持。

相关文章:

Spring boot集成log4j及日志配置详解,实战,ELK使用教程。

目录 引言一、SpringBoot 集成 Log4j1. 添加 Log4j 依赖2. 移除默认的Logback组件3. 创建 Log4j 配置文件4. 配置 Log4j2 日志文件 二、Log4j2 XML 文件配置详解基本结构Appenders 配置详解Loggers 配置详解 三、日志的作用四、日志数据采集与分析1. 日志数据采集2. 日志数据分…...

element 树组件 tree 横向纵向滚动条

Html <el-cardshadow"hover"class"solo flex-2"style"height: calc(100vh - 1.6rem); border: 1px solid #ebeef5"><div slot"header" class"clearfix"><span>问题分类</span></div><div …...

matlab 任意二维图像转点云

目录 一、概述二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 给定任意一张图片,通过代码操作将图片转成点云。图像中包含大量可用信息,其中必不可少的信息为像素坐标和像素值,将像…...

编程机器人的参数表怎么看

编程机器人的参数表怎么看 在探索编程机器人的世界时&#xff0c;理解其参数表是至关重要的一步。这些参数不仅反映了机器人的性能特点&#xff0c;还决定了其在实际应用中的表现。然而&#xff0c;对于初学者来说&#xff0c;参数表往往如同一本深奥的秘籍&#xff0c;充满了…...

上位机图像处理和嵌入式模块部署(h750 mcu串口命令处理)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面学习103和407的时候&#xff0c;当时学过串口的收发。不过当时使用的主要是阻塞的方式。这一次&#xff0c;我们看下应该怎么利用中断的形式进…...

西王食品2023营收下滑、净利润大幅减亏遭问询,近三年业绩承压

《港湾商业观察》廖紫雯 日前&#xff0c;西王食品股份有限公司&#xff08;以下简称&#xff1a;西王食品&#xff0c;000639.SZ&#xff09;收到来自深交所对公司2023年年报的问询函。 深交所问询函指出&#xff0c;要求公司说明营业收入下降、净利润大幅减亏的原因及合理性…...

视频媒介VS文字媒介

看到一篇蛮有思考意义的文章就摘录下来了&#xff0c;也引起了反思 目录 一、视频的定义 二、”视频媒介“与”文字媒介”作对比 1.形象 VS 抽象 2.被动 VS 主动 三、视频的缺点-【更少】的思考 1.看视频为啥会导致【更少的思考】 2.内容的【浅薄化】 3.内容的【娱乐化…...

虚拟化 之一 详解 jailhouse 架构及原理、软硬件要求、源码文件、基本组件

Jailhouse 是一个基于 Linux 实现的针对创建工业级应用程序的小型 Hypervisor&#xff0c;是由西门子公司的 Jan Kiszka 于 2013 年开发的&#xff0c;并得到了官方 Linux 内核的支持&#xff0c;在开源社区中获得了知名度和吸引力。 Jailhouse Jailhouse 是一种轻量级的虚拟化…...

汇凯金业:黄金期货交易时间规则

黄金期货交易时间规则因交易所不同而有所差异。以下是几个主要交易所的黄金期货交易时间及其相关规则&#xff1a; 一、纽约商品交易所(COMEX) 纽约商品交易所(COMEX)是全球最大的黄金期货交易市场之一&#xff0c;其黄金期货交易时间如下&#xff1a; 电子交易时间(通过CME…...

LogicFlow 学习笔记——4. LogicFlow 基础 边 Edge

边 Edge 和节点一样&#xff0c;LogicFlow 也内置一些基础的边。LogicFlow 的内置边包括&#xff1a; 直线 - line直角折现 - polyline贝塞尔曲线 - bezier 新建 src/views/Example/LogicFlow/Example08.vue 并编写如下代码&#xff1a; <script setup lang"ts&quo…...

QPS、TPS、并发量、PV、UV

QPS、TPS、并发量、PV、UV 目录 QPS、TPS、并发量、PV、UVQPS(Queries Per Second)TPS (Transactions Per Second)并发量 (Concurrency)PV (Page Views)UV (Unique Visitors) QPS(Queries Per Second) 含义&#xff1a;每秒查询率应用场景&#xff1a;常用于计算机中各类搜索引…...

深中通道通车在即,苏州金龙新V系穿梭巴士引领大湾区交通发展新篇章

深中通道&#xff0c;总投资500亿元&#xff0c;历时七年建成的世界级跨海工程&#xff0c;即将投入运营。该桥连接深圳、中山&#xff0c;全长24公里&#xff0c;通过“桥、岛、隧、水下互通”设计&#xff0c;克服地域障碍。桥面“穿梭巴士”同步启动&#xff0c;提供24小时跨…...

集成学习 #数据挖掘 #Python

集成学习是一种机器学习方法&#xff0c;它通过结合多个模型的预测结果来提高整体性能和稳定性。这种方法的主要思想是“集合智慧”&#xff0c;通过将多个模型&#xff08;比如决策树、随机森林、梯度提升机等&#xff09;的预测集成起来&#xff0c;可以减少单个模型的过拟合…...

IDEA 中设置 jdk 的版本

本文介绍一下 IDEA 中设置 jdk 版本的步骤。 一共有三处需要配置。 第一处 File --> Project Structure Project 和 Modules 下都需要指定一下。 第二处 File --> Settings 第三处 运行时的配置...

AI日报|Luma推出AI视频模型,又一Sora级选手登场?SD3 Medium发布,图中文效果改善明显

文章推荐 AI日报&#xff5c;仅三个月就下架&#xff1f;微软GPT Builder出局AI竞争赛&#xff1b;马斯克将撤回对奥特曼的诉讼 谁是最会写作文的AI“考生”&#xff1f;“阅卷老师”ChatGPT直呼惊艳&#xff01; ⭐️搜索“可信AI进展“关注公众号&#xff0c;获取当日最新…...

嵌入式系统复习(一)

第一章 嵌入式系统的定义、特点 嵌入式系统是以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软件硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 特点&#xff1a;嵌入性 专用性 计算机系统 嵌入式系统典型组成…...

一次搞定:Java中数组拷贝VS数组克隆

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…...

Java多线程编程与并发处理

引言 在现代编程中&#xff0c;多线程和并发处理是提高程序运行效率和资源利用率的重要方法。Java提供了丰富的多线程编程支持&#xff0c;包括线程的创建与生命周期管理、线程同步与锁机制、并发库和高级并发工具等。本文将详细介绍这些内容&#xff0c;并通过表格进行总结和…...

C++ 35 之 对象模型基础

#include <iostream> #include <string.h> using namespace std;class Students05{ public:// 只有非静态成员变量才算存储空间&#xff0c;其他都不算int s_a; // 非静态成员变量&#xff0c;算对象的存储空间double s_c;// 成员函数 不算对象的存储空间void f…...

PHP超级全局变量:功能、应用及最佳实践

PHP中的超级全局变量&#xff08;Superglobal Variables&#xff09;是预定义的数组&#xff0c;它们在脚本的全部作用域内都可以访问&#xff0c;无需使用global关键字。超级全局变量包含了关于请求、会话、服务器等各种信息&#xff0c;常见的有$_GET、$_POST、$_REQUEST、$_…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...

Axure零基础跟我学:展开与收回

亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...

使用VMware克隆功能快速搭建集群

自己搭建的虚拟机&#xff0c;后续不管是学习java还是大数据&#xff0c;都需要集群&#xff0c;java需要分布式的微服务&#xff0c;大数据Hadoop的计算集群&#xff0c;如果从头开始搭建虚拟机会比较费时费力&#xff0c;这里分享一下如何使用克隆功能快速搭建一个集群 先把…...

GC1808:高性能音频ADC的卓越之选

在音频处理领域&#xff0c;高质量的音频模数转换器&#xff08;ADC&#xff09;是实现精准音频数字化的关键。GC1808&#xff0c;一款96kHz、24bit立体声音频ADC&#xff0c;以其卓越的性能和高性价比脱颖而出&#xff0c;成为众多音频设备制造商的理想选择。 GC1808集成了64倍…...