我可以知道使用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个类都指的是同一个相同的日志?
谢谢。
答案 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)将为该类或包设置日志级别。如果您只使用一个记录器,则不能这样做。