2012-04-20 38 views
15

我知道它的软件包差Logger.getLogger(className)和LogFactory.getLog(className)之间的区别?

1)org.apache.log4j.Logger logger = Logger.getLogger(clazz);

2)org.apache.commons.logging.Log log = LogFactory.getLog(clazz);

第一个经由log4j使用记录器和第二个使用commons.logging。我们有一个巨大的项目,在某些类别中,记录器使用log4j进行配置,在某些情况下,其配置为commons.logging

我确实找到了一个log4j属性文件虽然。是否有类似的属性文件为commons.logging?我在哪里配置公用日志记录?我无法看到由commons-logging生成的日志。

任何帮助表示赞赏。

+2

Commons日志记录包装其他日志库;如果你使用的是log4j,它会使用该配置文件。 – 2012-04-20 13:00:43

+0

那么常用日志在内部使用Log4j?请解释你的意思。我对此一无所知。 – 2012-04-20 13:01:55

+0

您可以使用commons-logging.properties文件 – Satya 2012-04-20 13:02:03

回答

9

是的,共享记录是一个正面的API,它是假设抽象您从底层的日志框架(在实践中出现了java.util.logging之间的选择),这样你可以从一个切换到另一个不碰代码 - 只是通过切换CLASSPATH上的库。

不幸的是,由于一些设计错误,它在复杂的类加载环境(例如应用程序服务器)方面存在问题。目前它已被有效取代。

在你的情况下,我会建议坚持使用一个API - 无论是Log4J还是commons-logging,尽管commons-logging将(很可能)委托给log4J。您也可以迁移到使用SLF4J并安装桥接API,但这稍微更先进。

+0

我认为你的意思是代替...不被压制。 – 2012-04-20 13:14:44

+1

@Tomasz Nurkiewicz:我可以看到通过log4j配置的记录器,而来自commons-logging的记录器没有生成。你认为有些配置问题? – 2012-04-20 13:27:42

+0

@StephenC:当然,谢谢! – 2012-04-20 13:29:15

相关问题