LoggerFactory.getLogger" root"的区别是什么? vs" class"名称?

时间:2017-09-13 02:39:01

标签: java slf4j

我试图找到关于它们之间差异的答案:

class MyClass {
    private static Logger logger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
}

class MyClass {
    private static Logger logger = LoggerFactory.getLogger(MyClass.class);
}

只有您计划进行精细的日志记录设置才有用吗?就像在不同文件中分离类的日志一样,为每个文件打印更多/更少的信息等等。

我有这个疑问,因为我使用LoggerFactory.getLogger(MyClass.class)的大部分课程,但我认为LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)在大多数情况下都足够了。

谢谢!

1 个答案:

答案 0 :(得分:2)

  

只有您计划进行精细的日志记录设置才有用吗?就像在不同文件中分离类的日志一样,为每个文件打印更多/更少的信息等等。

这是对的。通过将日志记录控制到类级别,通过为每个类提供自己的记录器,您可以更精细地控制日志记录。例如,我们通常会记录包中类的所有日志条目(无论级别如何),例如my.employer.com.team.project。然后我们记录所有其他记录器的ERROR。然后,我们可以查看应用程序中使用的所有记录器,并可以远程启用/禁用我们想要的任何记录器。

  

我有这个疑问,因为我的大部分类都使用LoggerFactory.getLogger(MyClass.class),但我认为LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)在大多数情况下都足够了。

如果您为所有类提供相同的记录器,那么它们将以相同的方式运行。我认为你是对的,在大多数情况下,你会对待你所有的课程。以相同的方式记录,但情况并非总是如此。此外,如果您正在编写库代码,那么您不能使用根记录器,因为现在您删除了您的库的用户调整库的能力'日志。