多种方法解决Failed to load class “org.slf4j.impl.StaticLoggerBinder“.的错误
1. 复现错误
今天在编写使用Quartz
执行定时任务的方法,如下代码所示:
public class QuartzTest {
public static void main(String[] args) throws SchedulerException {
// 1、创建Scheduler(调度器)
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 2、创建JobDetail实例,并与SimpleJob类绑定
JobDetail jobDetail = JobBuilder.newJob(SimpleJob.class)
.withIdentity("job-1", "job-group").build();
// 3、构建Trigger(触发器),定义执行频率和时长
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
.withIdentity("trigger-1", "trigger-group")
.startNow() //立即生效
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ? "))
.build();
//4、执行
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
}
class SimpleJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) {
// 创建一个事件,下面仅创建一个输出语句作演示
final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(
Thread.currentThread().getName() + "--" + simpleDateFormat.format(new Date()));
}
}
}
启动时却报出如下图的错误:
即SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
2. 分析错误
首先,找到上图中的SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
这句话。
将其翻译成中文是SLF4J:有关更多详细信息,请参阅 http://www.slf4j.org/codes.html#StaticLoggerBinder。
。
于是,点击链接https://www.slf4j.org/codes.html#StaticLoggerBinder,如下图所示:
不过,这都是英文的,我们不妨翻译成中文,如下所示:
无法加载类org.slf4j.impl.StaticLoggerBinder
当
org.slf4j.impl.StaticLoggerBinder
类无法加载到内存中时,将报告此警告消息。当在类路径上找不到适当的SLF4J
绑定时,会发生这种情况。在类路径上放置一个(并且只有一个)slf4j-nop.jar slf4j-simple.jar,slf4j-log4j12.jar,slf4j-jdk14.jar或logback-classic.jar
应该可以解决问题。
请注意,slf4j-api
版本2.0.x
及更高版本使用ServiceLoader
机制。面向slf4j-api 2.x
的后端(如logback 1.3
及更高版本)不随org.slf4j.impl.StaticLoggerBinder
一起提供。如果放置一个面向slf4j-api 2.0.x
的日志记录后端,则需要在类路径上slf4j-api-2.x.jar
。另请参阅相关常见问题条目。
自1.6.0
从SLF4J
版本1.6
开始,在没有绑定的情况下,SLF4J
将默认为无操作 (NOP
) 记录器实现。
如果您负责打包应用程序并且不关心日志记录,则将slf4j-nop.jar
放在应用程序的类路径上将摆脱此警告消息。请注意,嵌入式组件(如库或框架)不应声明对任何SLF4J
绑定的依赖关系,而应仅依赖于slf4j-api
。当库声明对SLF4J
绑定的编译时依赖关系时,它会将该绑定强加给最终用户,从而否定SLF4J
的目的。
总的来说,就是缺少slf4j-log4j12.jar
这个依赖。
于是,查找我的项目,确实缺少slf4j-log4j12.jar
依赖。
3. 解决错误
由于我的项目缺少slf4j-log4j12.jar
依赖,在pom.xml
中增加如下以来即可:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.7</version>
<scope>compile</scope>
</dependency>
重新启动项目,便能正常运行。
4. 解决该错误的其他方法
因为我的错误在项目中缺少slf4j-log4j12
依赖,在pom.xml
中增加该依赖即可。
如果你在项目中已增加了slf4j-log4j12
依赖,但还是报错的话,可以参考如下解决方法。
检查范围(scope
)是否设置为test
,如下代码所示:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.7</version>
<scope>test</scope>
</dependency>
如果范围(scope
)设置为test
,也就是说只有在测试环境下,才可以使用。
而我是在main
方法中直接运行,所以不属于测试环境,所以,这个包相当于就没有加入依赖。
可以将范围(scope
)修改成compile
,如下图所示:
相关文章
- Ubuntu “Failed to fetch”错误的解决方法
- 真正解决Windows下UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xff in position 0错误的方法
- 域名系统DNS用来解析_网页域名解析错误怎么办
- 集成EasyCVR时,调取录像接口报跨域错误的解决方法
- 【错误记录】Android Studio 真机运行 Apk 应用报错 ( The application could not be installed: SHELL_UNRESPONSIVE )
- 【错误记录】Kotlin 报错 ( Some kotlin libraries attached to this project were compiled with a newer kotlin )
- SQLServer 错误 7908 表错误:分区 ID PN_ID 中的文件 FILE 不是有效的 Filestream 文件。 故障 处理 修复 支持远程
- Oracle安装遇到INS-30131错误的解决方法
- 有关HikariPool-1 – Failed to validate connection com.mysql.cj.jdbc.ConnectionImp 错误的产生原因与解决方法详解编程语言
- PHP yaf显示错误提示详解编程语言
- MySQL错误解决方法(mysql返回错误)
- MySQL日志类型:错误日志、慢查询日志及更多(mysql日志类型)
- 如何解决 “mount.nfs: Stale file handle”错误
- 如何处理MySQL错误1820?(mysql1820)
- 解决oracle O1745错误的方法(oracle01745)
- 解决MySQL数据库中1452错误的方法(mysql中1452错误)
- Redis操作出现的错误处理方法(redis 错误)
- 解决Oracle11出现错误的方法(oracle11错误)
- 解决Oracle 01628错误的简易指南(oracle 01628)
- 如何解决oracle 00920错误(oracle 00920)
- MySQL视图第1349号错误解决方法
- phpMyAdmin链接MySql错误个人解决方案
- 碰到MySQL无法启动1067错误问题解决方法
- js传参数受特殊字符影响错误的解决方法
- Provider错误80004005终极解决方法(完全有效的方法)
- SQLServer监控磁盘IO错误,msdb.dbo.suspect_pages
- Oracle数据库TNS常见错误的解决方法汇总
- IIS报在服务器上找不到脚本语言'VBScript.encode'错误解决方法
- 解决MySQLWorkbenchgnome-keyring-daemon错误的方法分享
- MysqlERROR1577错误解决方法