【已解决】使用SLF4J时的一个错误Failed to load class org.slf4j.impl.StaticLoggerBinder
- 工作小总结
- 时间:2022-03-22 15:21
- 3485人已阅读
简介
使用SLF4J时的一个错误Failed to load class org.slf4j.impl.StaticLoggerBinder和log4j:WARN No appenders could be found for logger解决方案
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
使用SLF4J时的一个错误Failed to load class org.slf4j.impl.StaticLoggerBinder和log4j:WARN No appenders could be found for logger解决方案
一:使用SLF4J时的一个错误Failed to load class org.slf4j.impl.StaticLoggerBinder
问题描述
使用日志一直都是使用了slf4j-api、slf4j-log4j12、log4j这三个包结合起来使用,新搭建了一个项目,然后创建了一个main方法进行测试运行。然后发现报错了。
Failed to load class org.slf4j.impl.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中的一个(并且只有一个)应该可以解决问题。 自1.6.0起SLF4J版本1.6 以来,在没有绑定的情况下,SLF4J将默认为无操作(NOP)记录器实现。 如果您负责打包应用程序并且不关心日志记录,那么将slf4j-nop.jar放在应用程序的类路径中将摆脱此警告消息。请注意,嵌入式组件(如库或框架)不应声明对任何SLF4J绑定的依赖关系,但仅依赖于slf4j-api。当库声明对SLF4J绑定的编译时依赖性时,它会将该绑定强加给最终用户,从而否定SLF4J的目的。
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.log4j.version}</version> <scope>test</scope> </dependency>
因为我把范围设置为test,也就是说只有在测试环境下,才可以使用,而我是在main
方法中直接运行,所以不属于测试环境,所以这个包相当于就没有加入依赖。后来修改为:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.log4j.version}</version> <scope>compile</scope> </dependency>
二:log4j:WARN No appenders could be found for logger解决方案
问题原因
缺失log4j.properties或log4j.xml配置文件;
log4j.properties配置文件为放在source文件夹下;
log4j.properties配置文件编码不正确;
解决方案
确认是否建立log4j.properties或log4j.xml配置文件;
确认配置文件是否名称为log4j.properties或log4j.xml;
确认配置文件编码是否为UTF-8
确认配置文件中的内容是否正确。
log4j.properties具体配置
1、在src/main/resources路径新建log4j.properties
2、添加如下内容
############# # log4j.rootLogger日志输出类别和级别:只输出不低于该级别的日志信息DEBUG < INFO < WARN < ERROR < FATAL # WARN:日志级别 CONSOLE:输出位置自己定义的一个名字 logfile:输出位置自己定义的一个名字 log4j.rootLogger=INFO,CONSOLE,logfile # 配置CONSOLE输出到控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender # 配置CONSOLE设置为自定义布局模式 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout # 配置CONSOLE日志的输出格式 2019-08-22 22:52:12,000 %r耗费毫秒数 %p日志的优先级 %t线程名 %C所属类名通常为全类名 %L代码中的行号 %x线程相关联的NDC %m日志 %n换行 log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} - %-4r %-5p [%t] %C:%L %x - %m%n ################ # 输出到日志文件中 ################ # 配置logfile输出到文件中 文件大小到达指定尺寸的时候产生新的日志文件 log4j.appender.logfile=org.apache.log4j.RollingFileAppender # 保存编码格式 log4j.appender.logfile.Encoding=UTF-8 # 输出文件位置此为项目根目录下的logs文件夹中 log4j.appender.logfile.File=C:\\Users\\durant.zeng\\Desktop\\2.8.0\\logs\\mylo.log # 后缀可以是KB,MB,GB达到该大小后创建新的日志文件 log4j.appender.logfile.MaxFileSize=10MB # 设置滚定文件的最大值3 指可以产生root.log.1、root.log.2、root.log.3和root.log四个日志文件 log4j.appender.logfile.MaxBackupIndex=3 # 配置logfile为自定义布局模式 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n ########################## # 对不同的类输出不同的日志文件 ########################## # club.bagedate包下的日志单独输出 log4j.logger.club.bagedate=DEBUG,bagedate # 设置为false该日志信息就不会加入到rootLogger中了 log4j.additivity.club.bagedate=false # 下面就和上面配置一样了 log4j.appender.bagedate=org.apache.log4j.RollingFileAppender log4j.appender.bagedate.Encoding=UTF-8 log4j.appender.bagedate.File=C:\\Users\\kaigejava\\Desktop\\2.8.0\\logs\\mylo.log log4j.appender.bagedate.MaxFileSize=10MB log4j.appender.bagedate.MaxBackupIndex=3 log4j.appender.bagedate.layout=org.apache.log4j.PatternLayout log4j.appender.bagedate.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n