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

引言

日志系统是非常重要的,常用于日常问题排查及数据分析统计等。我们将介绍如何在 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: log
  paths:
    - /path/to/your/logs/*.log

output.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 配置文件的各种配置方法。通过合理地配置日志系统,我们能够更好地进行故障排查、性能监控和安全审计。进一步地,通过日志数据采集和分析工具,我们能够实现对日志数据的深度挖掘,为我们的应用提供了更便捷的数据可视化等支持。

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将 Spring Cloud 与 Log4j2 集成,您可以按照以下步骤进行操作: 1. 添加以下 Maven 依赖项: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> <version>2.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <version>2.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> <version>2.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-stream</artifactId> <version>2.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>2.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>2.3.3.RELEASE</version> </dependency> ``` 2. 添加 log4j2 配置文件,例如 `log4j2-spring.xml`: ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration> ``` 3. 在 `application.properties` 文件中添加以下配置: ```properties logging.config=classpath:log4j2-spring.xml ``` 4. 启动应用程序,您应该能够在控制台中看到日志输出。 请注意,这只是一个基本的示例,您可能需要根据您的具体需求进行更改。例如,您可能需要将日志保存到文件中,或者将日志发送到日志集中处理系统(如 ELK 或 Splunk)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java码农杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值