我用的Spring Boot maven构建的工程,默认引入了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
再引入webmagic相关的包之后,运行出现大量的debug日志。
此时没有加入任何的log配置文件
代码初始化执行时报以下警告

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/hongbo/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/hongbo/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

说明有其他dependency引入了logback
根据作者的说明:
WebMagic 使用slf4j-log4j12作为slf4j的实现.如果你自己定制了slf4j的实现,请在项目中去掉此依赖。

<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
查看maven tree
发现

该包是在spring-boot-starter被引入的,所以需要做排除。
但是不能直接排除spring-boot-starter-logging,这样则所有依赖于slf4j的也将失效。
所以排除logback-classic即可
 
如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
关于有多个log的实现及其实际绑定的log配置文件。
通常,我们会使用以下三种log
log4j,对应配置文件log4j.xml或log4j.properties
logback, 对应配置文件logback.xml
log4j2, 对应配置文件log4j2.xml或log4j2.json
 
但是在引用log4j2时有个陷阱或者小细节
当直接依赖log4j2时,其对应的配置文件为log4j2.xml或log4j2.json
其依赖如下
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.7</version>
</dependency>
当使用slf4j-log4j12时,其对应的配置文件为log4j.xml或log4j.properties
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
当项目中存在多个log依赖,且没有排除相应的依赖的时候,会选择哪个配置文件呢?
想maven加载冲突jar有没有加载顺序(偷懒),在官网查了下:点击打开链接
The way SLF4J picks a binding is determined by the JVM and for all practical purposes should be considered random.
说明slf4j具体选哪个binding是jvm随机决定的。那么偷懒(调整先后顺序)不成,再继续。
虽然SLF4J随机binding了一个log,但是SLF4J会告诉我们它到底binding了谁。
通过项目启动的时候,查看SLF4J: Actual binding is of type
例如SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
说明依赖的是Log4j对应的配置文件
 
当实际绑定的为logback且logback.xml不存在时,springboot默认会输出debug级别的日志。
参考:
spring boot log4j2配置不生效
 
Maven全局排除某引用的一种方式

webmagic 日志使用及maven项目中排除日志依赖的更多相关文章

  1. 解决Maven项目中jar包依赖冲突问题

    版本冲突的解决方案 [1]调节原则 [1]路径最短者优先原则 [2]路径相同时,先声明者优先原则 [2]排除原则:用于排除某项依赖的依赖jar包 <dependency> <grou ...

  2. IDEA maven项目中引入ojdbc依赖报红色波浪线问题的解决办法

    1.pom.xml配置文件中删除ojdbc的依赖配置后更新maven项目,然后再到本地仓库中将ojdbc这个文件夹删除 2.在网上下载ojdbc14.jar,然后改名为ojdbc14-10.2.0.2 ...

  3. maven项目中,添加依赖后,出现"Dependency 'xxxx‘ not found"解决过程

    转自:https://blog.csdn.net/lixld/article/details/82284269 idea中修改pom.xml文件,添加各种工程依赖的jar,一直没有问题, 但今天遇到问 ...

  4. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图(转载)

    Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图 2017年04月05日 10:53:13 李学凯 阅读数:104997更多 所属专栏: Intellij Idea   ...

  5. Maven项目中Spring整合Mybatis

    Maven项目中Spring整合Mybatis 添加jar包依赖 spring需要的jar包依赖 <dependency> <groupId>org.springframewo ...

  6. SLF4J 和 Logback 在 Maven 项目中的使用方法

    原文:http://blog.csdn.net/llmmll08/article/details/70217120 本文介绍 SLF4J 和 Logback 在 Maven 项目中的用法,包括日志框架 ...

  7. Maven项目中mvn clean后找不到測试类问题

    在Maven项目中进行单元測试,但mvn clean后又一次mvn install项目,再次进行单元測试.会有下面的错误. <span style="font-family:KaiTi ...

  8. Mybatis、maven项目中整合log4j (17)

    Mybatis.maven项目总整合log4j java 中Mybatis.maven项目总整合log4j 1.pom增加log4j包引用 2.添加 log4j.properties文件 # java ...

  9. 如何查看Maven项目中的jar包依赖树情况

    对于开发人员,我想大家对于Maven应该不会陌生吧,如何在一个Maven项目中对这个项目中所引用的第三方jar包有个直观的了解呢? 其实实现很简单,只需要借助于Maven的一条命令,如下所示: mvn ...

随机推荐

  1. java web项目在linux部署、启动,查看系统配置常用的linux命令总结

    本文为博主原创,未经允许不得转载: 以下为在工作中常用的linux命令进行了总结,主要在项目安装及启动,及编辑部署文件时应用较多1.gz文件是一种压缩文件. 以·tar.gz为扩展名的是一种压缩文件, ...

  2. CSS3实现基本图形

    http://blog.csdn.net/laokdidiao/article/details/51189476 代码: <!DOCTYPE html> <html> < ...

  3. 3、iptables扩展及使用

    iptables/netfilter netfilter: kernel framework,位于内核中的协议框架 iptables  是规则管理命令行工具 四表:filter, nat, mangl ...

  4. 【四】php 函数

    一:函数 作用:为了分割那些能够独立完成有明确任务的代码,更易于阅读 调用函数:function_name(args1,args2...); args可以是任何一种php变量,包括数组或对象 函数名不 ...

  5. art-template

    art-template 输出 标准语法 {{value}} {{data.key}} {{data['key']}} {{a ? b : c}} {{a || b}} {{a + b}} 原始语法 ...

  6. 史上最全Java面试题(带全部答案)

    今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次.对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦.在跳槽季来临之前,特地做这 ...

  7. ip啊

    网络模型被OSI分成七层,TCP/IP协议大致对应了2.3.4.7层,分别是数据链路层.网络层.传输层.应用层,IP协议处于网络层上,它的工作原理说白了并不复杂: 整个互联网上所有的机器都有唯一一个I ...

  8. VC异常.简单抛,简单捕获

    1.ZC:始终没有找到,能像Delphi7里面那样能抛 字符串描述 的异常信息.(难道Delphi是这样做的?:在程序的最外围 套了一层异常捕获,然后在获取到异常之后,自己再将异常信息弹出来,我们写的 ...

  9. 首篇 sdk 之 AlertDialog

    带着十足的干劲,用着有限的英语水平,我们来看看sdk里docs里的AlertDialog: AlertDialog SDK 原文描述:A dialog that can show a title, u ...

  10. JAVA基础知识总结:二十

    一.网络编程基础 1.概念 所谓计算机网络,就是把分布在不同区域的计算机与专门的外部设备使用通信线路连接成一个规模大,功能比较强的网络系统,从而使得计算机之间可以相互通信,共享资源 所谓的网络编程,在 ...