mat*_*t b 83 java logging log4j apache-commons slf4j
我有一个现有的应用程序,它针对log4j进行所有日志记录.我们使用了许多其他库,它们也使用log4j,或者记录Commons Logging,最终使用我们环境中的log4j.我们的一个依赖项甚至记录了slf4j,它也可以正常工作,因为它最终也会委托给log4j.
现在,我想为这个应用程序添加ehcache以满足一些缓存需求.以前版本的ehcache使用了commons-logging,它在这种情况下可以很好地工作,但是从版本1.6-beta1开始,它们已经删除了对commons-logging的依赖,而是用java.util.logging替换它.
不熟悉java.util.logging提供的内置JDK日志记录,是否有一种简单的方法可以将针对log4j发送到JUL的任何日志消息记录下来,因此我可以使用现有配置并设置任何日志记录来来自ehcache?
看看JUL的javadocs,看起来我可以设置一堆环境变量来改变使用的LogManager
实现,也许可以用它来将log4j包装Logger
在JUL Logger
类中.这是正确的方法吗?
具有讽刺意味的是,当世界其他地方(大部分)使用第三方库时,图书馆使用内置JDK日志记录会引起如此头疼.
Jim*_*ans 19
我们在当前项目中使用SLF4J,它对我们来说非常有效.SLF4J由Log4J的创建者CekiGülcü编写,他的表现非常出色.在我们的代码中,我们直接使用SLF4J日志记录API,并配置SLF4J,以便来自Jakarta Commons Logging(JCL),java.util.logging(JUL)和Log4J API的调用都桥接到SLF4J API.我们需要这样做,因为像我们一样,我们使用选择了不同日志API的第三方(开源)库.
在SLF4J的底部,您将其配置为使用特定的记录器实现.它带有一个内部或"简单"记录器,您可以使用Log4J,JUL或Logback覆盖它.只需在类路径中放入不同的jar文件即可完成配置.
最初,我们使用了由CekiGülcü编写的Logback实现.这非常强大.但是,我们决定将我们的应用程序部署到Glassfish Java EE应用程序服务器,该服务器的日志查看器需要JUL格式的消息.所以今天我从Logback切换到JUL,在短短几分钟内,我用一个SLF4J jar替换了两个Logback jar,将它连接到JUL实现.
就像@overthink一样,我衷心建议在你的设置中使用SLF4J.
Emm*_*urg 12
有一个比SLF4J更简单的替代方案来将JUL与log4j连接起来,请参阅http://people.apache.org/~psmith/logging.apache.org/sandbox/jul-log4j-bridge/examples.html
您只需将jul-log4j-bridge放在类路径上并添加系统属性:
-Djava.util.logging.manager=org.apache.logging.julbridge.JULBridgeLogManager
Run Code Online (Sandbox Code Playgroud)
jul-log4j-bridge不在Maven Central中,可以从此存储库中获取:
<repository>
<id>psmith</id>
<url>http://people.apache.org/~psmith/logging.apache.org/repo</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
Run Code Online (Sandbox Code Playgroud)
然后用于:
<dependency>
<groupId>org.apache.logging</groupId>
<artifactId>apache-jul-log4j-bridge</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>apache-log4j-component</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
也可以通过以下步骤从源重建它:
2014年10月
由于log4j的2.1版本存在组件log4j-jul,它允许这一点.但是,如果您使用的是log4j 1,则必须可以升级到log4j2才能使用此方法.