处理Storm1.2.2 日志报错 与spring boot冲突
时间:2022-07-22
本文章向大家介绍处理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>
这样就搞定了
- Gogland更名为GoLand,并附加新功能
- go(golang)中的类型转换
- 送你们几个字!对!就是MACCMS注入!
- Golang 序列化之 ProtoBuf
- 《大话数据结构》 查找 以及一个简单的哈希表例子
- 《大话数据结构》树以及赫夫曼编码的例子
- 《大话数据结构》一些基础知识
- Golang RPC 之 gRPC
- 厚土Go学习笔记 | 06. 变量
- 厚土Go学习笔记 | 05. 函数
- Implement Domain Object in Golang
- 厚土Go学习笔记 | 04. 导入和导出的不同 用math.Pi来举例
- 厚土Go学习笔记 | 03. 数学运算的随机数
- Nodejs学习笔记(十一)--- 数据采集器示例(request和cheerio)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- TSINGSEE青犀视频官网全新改版即将上线,系统界面迎来整体升级
- c语言之带参数的宏定义
- spring AOP之基于xml配置文件的方式来配置AOP
- 基于TypeScript封装Axios笔记(五)
- spring之操作数据库之使用JdbcTemplate和JdbcDaoSupport
- 修改Markdown神器[Typora]的主题样式
- 视频压缩原理入门
- spring之为什么要使用事务?(一)
- Mysql 如何实现全文检索,关键词跑分
- spring之操作数据库之使用NamedParameterJdbcTemplate(具名参数)
- 谷歌colab上安装百度paddlepaddle框架
- 谷歌colab运行paddlepaddle之手写数字识别
- 【python-leetcode112-树的深度遍历】路径总和
- spring之第一个spring程序
- 【python-leetcode437-树的深度遍历】路径总和Ⅲ