无法找到正在使用的记录器配置

时间:2017-03-05 17:19:59

标签: java maven logging jar

我有一个罐子,比如a.jar,我只想在INFO级别启用日志记录。这个jar还依赖于另一个jar,例如b.jar,它使用Apache HTTP客户端。当我运行我的应用程序时,我看到屏幕上有很多调试输出,包括仅使用这种格式的Apache HTTP客户端的东西,不管我在log4j.properties中放置了什么:

[com.amazonaws.AmazonWebServiceClient] : Internal logging successfully configured to commons logger: true Ignored FQCN: org.apache.commons.logging.impl.SLF4JLocationAwareLog

对于我的生活,我无法弄清楚罐子从哪里获得配置。这是我尝试过的事情。 1.仅向a.jar的main / resources目录添加了log4j.properties 2.仅向b.jar的main / resources目录添加了log4j.properties 3.删除了log4j.properties

请帮助我提供一些输入,了解可以从哪里获取日志记录配置。

这里是a.jar的摘录

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.15</version>
    <scope>compile</scope>
</dependency>

这是b.jar

的摘录
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.7</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.7</version>
  <scope>compile</scope>
</dependency>

2 个答案:

答案 0 :(得分:0)

我认为你的意思是this “Apache HTTP client”?如果是这样,那么Log4J的日志记录配置不会影响HttpClient的日志输出,因为后者既不使用SLF4J也不使用Log4J。正如您在this POM中看到的,HttpClient使用Apache Commons Logging代替其日志输出。

所以你的目标是通过SLF4J将所有Commons Logging输出重定向到Log4J。这需要两个步骤:

  1. 为Commons Logging添加SLF4J桥。
  2. 确保将桥接器用作Commons Logging的替代品。
  3. 要添加的桥梁描述为here。为了确保实际使用网桥,我建议exclude the original Commons Logging JAR。您应该能够为项目B实现以下新的/更新的依赖项的两个步骤:

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.3</version>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>1.7.24</version>
    </dependency>
    

    我在最新的SLF4J版本1.7.24中添加了jcl-over-slf4j网桥,因为您的SLF4J版本(1.7.7)似乎似乎不支持Commons Logging 1.2,但可能会使用通过HttpClient(至少是版本4.5.3中的那个)。

    (请注意,我没有对此进行过测试。但最终的解决方案应该至少与所描述的方法非常相似。)

答案 1 :(得分:0)

看看this,似乎其中一个亚马逊sdk罐子就是这个日志配置所在的地方。

它使用apache commons日志记录,并且您正在为项目执行的任何配置正在为slf4j完成,因此不会产生任何影响。