我有一个罐子,比如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>
答案 0 :(得分:0)
我认为你的意思是this “Apache HTTP client”?如果是这样,那么Log4J的日志记录配置不会影响HttpClient的日志输出,因为后者既不使用SLF4J也不使用Log4J。正如您在this POM中看到的,HttpClient使用Apache Commons Logging代替其日志输出。
所以你的目标是通过SLF4J将所有Commons Logging输出重定向到Log4J。这需要两个步骤:
要添加的桥梁描述为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完成,因此不会产生任何影响。