升级FSCrawler至2.10后出现SLF4J无提供者警告,如何消除?
将FSCrawler从2.9版本升级至2.10版本后,执行旧版本的索引命令:
/usr/bin/fscrawler --config_dir /home/user1/conf test_index --restart --loop 1
出现以下SLF4J警告:
SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier. SLF4J: Ignoring binding found at [jar:file:/usr/local/src/fscrawler-distribution-2.10-SNAPSHOT/lib/log4j-slf4j-impl-2.20.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
当前使用Log4j作为日志工具,需消除上述SLF4J警告。
警告核心是SLF4J 2.x版本与旧的1.7.x API/绑定存在兼容性冲突,以下是具体解决步骤:
更新SLF4J API至兼容版本
进入FSCrawler的lib目录(示例路径:/usr/local/src/fscrawler-distribution-2.10-SNAPSHOT/lib),删除所有slf4j-api-1.7.*.jar文件,替换为与log4j-slf4j-impl-2.20.0.jar匹配的SLF4J API 2.x版本(如slf4j-api-2.0.9.jar,版本需与Log4j绑定的SLF4J版本兼容)。清理冲突的SLF4J绑定
移除目录中所有针对SLF4J 1.7.x的旧绑定包(如slf4j-log4j12.jar、slf4j-jdk14.jar等),确保仅保留log4j-slf4j-impl-2.20.0.jar作为SLF4J的唯一绑定。确认启动环境的ClassPath
检查FSCrawler的启动脚本(如/usr/bin/fscrawler),确保脚本中没有额外引入旧的SLF4J相关jar包,ClassPath仅包含兼容的依赖文件。验证Log4j配置有效性
确保你的Log4j配置文件(如log4j2.xml)格式正确,SLF4J会通过log4j-slf4j-impl桥接器自动将日志委托给Log4j处理,无需额外修改配置。
完成上述操作后,重新执行FSCrawler索引命令,SLF4J警告即可消除。
内容的提问来源于stack exchange,提问作者Manoj Agarwal

