处理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>
这样就搞定了
- linux学习第五十四篇:配置Tomcat监听80端口,配置Tomcat的虚拟主机,Tomcat日志
- linux学习第五十六篇:集群介绍,keepalived介绍,用keepalived配置高可用集群
- linux学习第五十八篇: 负载均衡集群介绍,LVS介绍,LVS的调度算法,LVS NAT模式搭建
- Python中eval带来的潜在风险,你知道吗?
- React Native自定义导航条
- android混淆那些坑
- 微信小程序开发入门篇
- Support Annotation Library使用详解
- React Native之Navigator
- React Native组件生命周期
- React Native使用原生组件
- Android ViewDragHelper及移动处理总结
- android 仿音悦台页面交互效果
- Webpack+Babel+React开发环境搭建
- 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 文档注释
- pytorch和tensorflow的爱恨情仇之定义可训练的参数
- Hive中库和表的常见操作
- 宝石与石头
- 给你的MyBatis-Plus装上批量插入的翅膀
- pytorch和tensorflow的爱恨情仇之参数初始化
- scp命令
- osgEarth使用笔记4——加载矢量数据
- Pots(POJ - 3414)【BFS 寻找最短路+路径输出】
- Vue路由Hash模式分析
- Flutter基础widgets教程-CupertinoButton篇
- 利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料)
- 组合模式
- Js中数组空位问题
- 反转字符串
- Prime Path(POJ - 3126)【BFS+筛素数】