使用org.apache.commons.logging.LogFactory.getLog的最佳实践

时间:2009-10-08 09:24:56

标签: java configuration logging

我可以知道使用org.apache.commons.logging.LogFactory.getLog的最佳做法是什么?

对我来说,我按照以下方式使用它:

public class A
{
    private static final Log log = LogFactory.getLog(A.class);
}

public class B
{
    private static final Log log = LogFactory.getLog(B.class);
}

那么,如果我有100个类,那么将创建100个静态日志对象?

或者最好这样做吗?

public class A
{
    private static final Log log = LogFactory.getLog(Main.class);
}

public class B
{
    private static final Log log = LogFactory.getLog(Main.class);
}

所有100个类都指的是同一个相同的日志?

谢谢。

3 个答案:

答案 0 :(得分:4)

请记住大多数java开发人员忽略的“静态问题”,它也会影响log4j,java.util.Logger和SLF4J。您可以在Apache Commons Wiki中阅读相关内容。据报道,如果您正在开发一个库,计划在容器(例如j2ee容器)中发布它,在许多应用程序之间共享,最好使用像

这样的东西。
private transient final Log logger = LogFactory.getLog( this.getClass() );

答案 1 :(得分:3)

第一个选项 - 每个类(或功能)都有一个记录器。由于大多数日志记录系统(log4j,logback,java util日志记录等)都具有记录器层次结构的概念,因此您可以将其与包层次结构相匹配,并更好地控制要在哪个级别记录哪些功能。例如:

com.example=WARN       # global setting
com.example.web=INFO   # increase logging for the web controllers
com.example.dao=DEBUG  # trying to track bugs in the database layer

答案 2 :(得分:2)

在绝大多数情况下,你的方式是可行的。

主要优点是每个类都有一个可以单独配置的记录器(或类别或其他),例如

log4j.logger.org.springframework.transaction=DEBUG

(假设log4j)将为该类或包设置日志级别。如果您只使用一个记录器,则不能这样做。