使用 getSimpleName() 与 getName() 获取记录器

2022-09-02 00:17:12

我见过使用的代码,它获取给定的使用log4jloggerLogger

static public Logger getLogger(String name)

static public Logger getLogger(Class clazz)

前者使用显式传递的 api,而后者使用传递的 。这两者之间有区别吗?如果我将各种包配置为在 log4j.properties 文件中以不同级别进行记录,是否会受到影响?getSimpleName()getName()Class


答案 1

是的,有一个巨大的差异。

例如,我从不使用,因为它会剥离软件包名称。除了在两个不同的包中存在相同的类名时遇到问题(导致两个类都获得相同的记录器实例),您还失去了控制记录器继承的能力。simpleNameLogger

例如,对于两个记录器:

com.foo.A
com.foo.B

在属性中,我可以拥有:

log4j.logger.com.foo=DEBUG,CONSOLE

答案 2

例如,我的类ShapeDemo.java驻留在com.test包中,我编写了如下代码。

System.out.println("Name-->"+ShapeDemo.class.getName());
System.out.println("SimpleName-->"+ShapeDemo.class.getSimpleName());

这将输出以下内容

Name-->com.test.ShapeDemo
SimpleName-->ShapeDemo

推荐