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

2024-06-14 08:04

本文主要是介绍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使用教程。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059837

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM