1

在 Java 中,用于创建记录器,而不是调用

private static final Logger logger = LoggerFactory.getLogger("ClassName");

我创建了一个实用方法,它从堆栈跟踪返回类名并调用该方法。

private static final Logger logger = LoggerFactory.getLogger(Utilities.getInvokingClassName());

Utilities.java

public static String getInvokingClassName()
{
    return new Throwable().getStackTrace()[1].getClassName();
}

显然,我正在使用资源密集型流程,而优点是我在编码时具有更高的模块化。问题是这对性能的影响有多大?如果它不是太耗费资源,那为什么不是标准做法呢?

4

3 回答 3

6

它对性能的影响不大,但它可能没有被使用,因为它使一个非常简单的场景过于复杂。您的代码可能更加模块化,但它变得更难阅读和理解。

于 2013-01-07T21:09:01.133 回答
3

您可以通过将 Class 对象传递给记录器来创建记录器。每当我得到一个记录器时,我通常会这样做:

public class Foo {
    private static final Logger LOG = LoggerFactory.getLogger(Foo.class);
...

这比键入类名更容易,并且通常受益于快速查找替换和 IDE 代码辅助。我认为您的方法可能有点太棘手并且难以阅读。

于 2013-01-07T21:20:20.207 回答
1

事实上,我认为你有点过于复杂了,因为你可以做一些更简单的事情:

this.getClass().getName()

然后你可以把它改写成这样:

Logger logger = LoggerFactory.getLogger(this.getClass().getName());

就是这样。

于 2015-05-04T20:41:27.910 回答