SpringBoot集成log4j2出现Logback configuration error detected: current ElementPath is

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringBoot集成log4j2出现Logback configuration error detected: current ElementPath is

异常:一般是包冲突引起的

1 SpringBoot整合Log4j2步骤:

删除spring-boot-starter-parent默认使用spring-boot-starter-logging依赖

在pom.xml中增加spring-boot-starter-log4j2依赖

创建log4j2.xml文件即可

执行,指定目录会生成相应的log文件

2 加入依赖和log4j2.xml文件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions><!-- 去掉springboot默认配置 -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 -->
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
 

3.resources目录下创建log4j2.xml文件

<!--定义appender-->
<appenders>
    <!--控制台的输出配置-->
    <console name="Console" target="SYSTEM_OUT">
        <!-- 设置控制台只输出INFO及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
        <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
        <!--输出日志的格式-->
        <PatternLayout pattern="${log_pattern}"/>
    </console>
 
    <!-- 所有的日志信息会打印到此文件中,append=false每次启动程序会自动清空 -->
    <!-- <File name="all" fileName="${file_path}/all.log" append="true">
        <PatternLayout pattern="${log_pattern}"/>
    </File>-->
    <!--
    该RollingFile存储INFO级别的日志,
    默认存储到 fileName 文件中
    超过SizeBasedTriggeringPolicy的设定值,则存储到 filePattern 文件中
    -->
    <RollingFile name="RollingFileInfo" fileName="${file_path}/info.log" filePattern="${file_path}/${backup_folder}/info${backup_file_suffix}">
        <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
        <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
        <!-- 写入日志文件的模板 -->
        <PatternLayout pattern="${log_pattern}"/>
        <Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,超过该数量,会滚动删除前面的记录 -->
            <DefaultRolloverStrategy max="5">
        <Delete basePath="" maxDepth="">
          <IfFileName glob="*.log" />
          <IfLastModified age="*1d" />
        </Delete>
      </DefaultRolloverStrategy>
            <!--多长时间滚动一次-->
            <TimeBasedTriggeringPolicy interval="2 hour" />
            <!-- 一个日志文件的最大大小 -->
            <SizeBasedTriggeringPolicy size="${file_max_size}"/>
        </Policies>
    </RollingFile>
    <RollingFile name="RollingFileWarn" fileName="${file_path}/warn.log" filePattern="${file_path}/${backup_folder}/warn${backup_file_suffix}">
        <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="${log_pattern}"/>
        <Policies>
            <TimeBasedTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="${file_max_size}"/>
        </Policies>
    </RollingFile>
    <RollingFile name="RollingFileError" fileName="${file_path}/error.log" filePattern="${file_path}/${backup_folder}/error${backup_file_suffix}">
        <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="${log_pattern}"/>
        <Policies>
            <TimeBasedTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="${file_max_size}"/>
        </Policies>
    </RollingFile>
</appenders>
<!-- 只有定义了logger并使用appender-ref,appender才会生效 -->
<loggers>
    <!--过滤掉spring和hibernate的一些无用的debug信息-->
    <logger name="org.springframework" level="INFO"/>
    <logger name="org.mybatis" level="INFO">
        <!-- 添加如下设置,控制台会再打印一次 -->
        <AppenderRef ref="Console"/>
    </logger>
    <root level="INFO">
        <appender-ref ref="Console"/>
        <appender-ref ref="RollingFileInfo"/>
        <appender-ref ref="RollingFileWarn"/>
        <appender-ref ref="RollingFileError"/>
    </root>
</loggers>
 

4.级别描述

机制:如果一条日志信息的级别大于等于配置文件的级别,就记录。

trace:追踪,就是程序推进一下,可以写个trace输出

debug:调试,一般作为最低级别,trace基本不用。

info:输出重要的信息,使用较多

warn:警告,有些信息不是错误信息,但也要给程序员一些提示。

error:错误信息。用的也很多。

fatal:致命错误。

 

5.输出源控制

  • CONSOLE(输出到控制台)
  • FILE(输出到文件)

 

6.输出格式

  • SimpleLayout:以简单的形式显示
  • HTMLLayout:以HTML表格显示
  • PatternLayout:自定义形式显示

7.PatternLayout自定义日志布局

%d:显示日志记录时间,{<日期格式>}使用ISO8601定义的日期格式 如:%d{yyyy-MM-dd HH:mm:ss}

%-5level : 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0

%c : 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名 字空间

%C : 列出调用logger的类的全名(包含包路径)

%t : 输出当前线程名称

%p : 日志输出格式

%m : 日志内容,即 logger.info(“message”)

%M : 方法名

%n : 换行符

%F: 显示调用logger的源文件名

%L : 行号

%l : 输出语句所在的行数, 包括类名、方法名、文件名、行数

%r : 显示从程序启动时到记录该条日志时已经经过的毫秒数

%t : 输出产生该日志事件的线程名

%x : 按NDC(Nested Diagnostic Context,线程堆栈)顺序输出日志

相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
相关文章
|
7天前
|
Java Spring
在Spring Boot中使用AOP实现日志切面
在Spring Boot中使用AOP实现日志切面
|
7天前
|
开发框架 运维 监控
解决Spring Boot中的日志管理挑战
解决Spring Boot中的日志管理挑战
|
7天前
|
Java Spring
在Spring Boot中使用AOP实现日志切面
在Spring Boot中使用AOP实现日志切面
|
12天前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
22 1
|
18天前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
20 2
|
6天前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成
|
7天前
|
监控 Java Spring
在Spring Boot中使用AOP实现日志记录
在Spring Boot中使用AOP实现日志记录
|
7天前
|
存储 运维 监控
在Spring Boot中集成分布式日志收集方案
在Spring Boot中集成分布式日志收集方案
|
7天前
|
开发框架 运维 监控
深入理解Spring Boot中的日志框架选择
深入理解Spring Boot中的日志框架选择
|
14天前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka集成的深度指南
Spring Boot与Apache Kafka集成的深度指南