当前位置: 首页 > 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、$_…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...