专栏首页用户7614879的专栏处理Storm1.2.2 日志报错 与spring boot冲突

处理Storm1.2.2 日志报错 与spring boot冲突


通过mvn dependency:tree可以看到Sprint Boot Starter和Storm引入的日志记录框架不相同的,如下:

Spring Boot Starter引入的日志组件是log4j-to-slf4j:

+- org.springframework.boot:spring-boot-starter:jar:2.0.4.RELEASE:compile
|  +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.4.RELEASE:compile
|  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile

Storm1.2.2引入的日志组件是log4j-slf4j-impl:

+- org.apache.storm:storm-core:jar:1.2.2:compile
|  +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.10.0:compile

两个放一起就会冲突,默认两个都引入了,就会报如下错误“No matching field found: getConfiguration for class org.apache.logging.slf4j.SLF4JLoggerContext”:

java.lang.IllegalArgumentException: No matching field found: getConfiguration for class org.apache.logging.slf4j.SLF4JLoggerContext

为了解决这种冲突,此时的解决方案是去掉spring boot中的默认日志组件的引入:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-to-slf4j</artifactId>
		</exclusion>
	</exclusions>
</dependency>

此时在代码中通过如下引入slf4j记录日志:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
protected final Logger logger = LoggerFactory.getLogger(this.getClass());

application.properties中增加如下内容:

logging.config=classpath:logback.xml

在classpath下增加logback.xml的配置文件,示例内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="30 seconds" packagingData="true">
    <!-- 设置 logger context 名称,一旦设置不可改变,默认为default -->
    <contextName>StreamProcessor</contextName>
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">  
        <!-- 当前活动日志文件名 -->
        <file>./my_log.log</file>
        <!-- 文件滚动策略根据%d{patter}中的“patter”而定,此处为每天产生一个文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 归档文件名“.zip或.gz结尾”,表示归档文件自动压缩 -->
            <FileNamePattern>./my_log%d{yyyyMMdd}.log.zip</FileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>        
 
        <encoder>
          <pattern>%d{HH:mm:ss.SSS}[%-5level][%thread]%logger{36} - %msg%n</pattern>         
        </encoder>
    </appender>
    
    <!-- 日志级别若没显示定义,则继承最近的父logger(该logger需显示定义level,直到rootLogger)的日志级别-->
    <!-- logger的appender默认具有累加性(默认日志输出到当前logger的appender和所有祖先logger的appender中),可通过配置 “additivity”属性修改默认行为-->
    <logger name="org.apache.storm"  level="INFO" additivity="false" >
    	<appender-ref ref="STDOUT" />
    </logger>
    <logger name="org.springframework.web"  level="INFO" additivity="false" >
    	<appender-ref ref="STDOUT" />
    </logger>
 
    <!-- 至多只能配置一个root -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

这样就搞定了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 处理Sprint Boot与Storm1.2.2日志实现的冲突,使用logback记录日志

    通过mvn dependency:tree可以看到Sprint Boot Starter和Storm引入的日志记录框架不相同的,如下:

    heasy3
  • JAVA日志框架适配/冲突解决方案

    上面的这些问题,基本都是由于多套日志框架共存或配置错误导致的。那么为什么会出现共存或者冲突呢? 一般是以下几种原因:

    神秘的寇先森
  • springboot开发spark-submit的java代码

    习惯使用spark-submit提交python写的pyspark脚本,突然想开发基于springboot开发java spark代码。在实际开发工程中,由于对...

    mikeLiu
  • Slf4j 包老冲突,每次排查半天,是什么原因?怎么解决?

    在进行 Java 开发时,通常我们会选择 Slf4j 作为日志门面,但日志实现却不尽相同。如果系统运行中同时存在多个日志实现,就会出现类似下图的 Warning...

    芋道源码
  • Spring Boot 2 集成log4j2日志框架

    Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题。而且日志处理中我们会用到...

    码农小胖哥
  • Spring Boot启动slf4j提示找不到weblogic.xml日志异常

    启动Spring Boot项目时,会遇到如下关于slf4j相关的日志异常情况,导致项目无法启动。

    程序新视界
  • TDDL与Spring Boot集成Version报错——跟踪与解决

    先说背景:公司采用diamond+tddl,这套技术来做web管理。本人处于好奇率先体验了下spring-boot,于是就有了spring-boot+tddl...

    用户1154259
  • 蚂蚁金服开源了这一款研发框架!还是增强版的

    SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,...

    开发者技术前线
  • 我的天,Spring Boot 居然还有 Plus 版本

    SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,...

    猿天地
  • Kafka、Logstash、Nginx日志收集入门

    Nginx作为网站的第一入口,其日志记录了除用户相关的信息之外,还记录了整个网站系统的性能,对其进行性能排查是优化网站性能的一大关键。 Logstash是一个接...

    后端码匠
  • 蚂蚁开源的 SOFABoot,和 Spring Boot 有啥关系?

    说到 SOFABoot,不得不先说下 SOFARPC 框架,SOFARPC 也是大名远扬,最早起源于阿里淘宝 HSF 框架,现在是蚂蚁金服开源的一款高性能、高可...

    Java技术栈
  • Spring Boot 2.0 版的开源项目云收藏来了!

    纯洁的微笑
  • 解决jar包冲突的简单办法

    解决jar包冲突的简单办法– 在使用log4j.properties时,pom中导入的一些jar会产生log4j类的冲突报错,以下是一个简单的pom配置:

    一滴水的眼泪
  • 程序员需要了解依赖冲突的原因以及解决方案

    依赖冲突是日常开发中经常碰到的过程,如果运气好,并不会有什么问题。偏偏小黑哥有点背,碰到好几次生产问题,排查一整晚,最后发现却是依赖冲突的引起的问题。

    andyxh
  • Kafka、Logstash、Nginx日志收集入门

    Kafka、Logstash、Nginx日志收集入门 Nginx作为网站的第一入口,其日志记录了除用户相关的信息之外,还记录了整个网站系统的性能,对其进行性能排...

    Zephery
  • maven多模块和依赖冲突问题汇总记录

    maven多模块和依赖冲突问题汇总记录目录前言:idea怎么创建maven多module的项目首先了解上面是多module?多Module管理项目的几种方式:创...

    阿东
  • 使用Spring Boot Gradle 打war包的一点心得体会

    最近实验室的一些项目采用了Spring Boot架构进行开发。项目完成以后,就需要部署到服务器。常规办法就是将项目打成war包,直接拖到tomcat的webaa...

    算法与编程之美
  • 阿里面试:看你springBoot用的比较溜来,说说springboot自动装配是怎么回事?

    最近有个读者在面试,面试中被问到了这样一个问题“看你项目中用到了springboot,你说下springboot的自动配置是怎么实现的?”这应该是一个sprin...

    java金融
  • 面试高频题:springBoot自动装配的原理你能说出来吗?

    最近有个读者在面试,面试中被问到了这样一个问题“看你项目中用到了springboot,你说下springboot的自动配置是怎么实现的?”这应该是一个sprin...

    java金融

扫码关注云+社区

领取腾讯云代金券