多种方法解决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.0SLF4J版本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,如下图所示:

在这里插入图片描述

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网全栈开发实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值