在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();
}缺点显然是我使用的是资源密集型进程,而优点是我在编码时具有更高的模块性。问题是,这对性能的影响有多大?如果它不太耗费资源,那么为什么它不是一种标准做法?
发布于 2013-01-08 05:09:01
它对性能的影响不是很大,但它可能不会被使用,因为它使一个非常简单的场景过于复杂。您的代码可能更加模块化,但它变得更难阅读和理解。
发布于 2013-01-08 05:20:20
您可以通过向记录器传递Class对象来创建记录器。每当我得到一个记录器时,我通常会这样做:
public class Foo {
private static final Logger LOG = LoggerFactory.getLogger(Foo.class);
...这比键入类名更容易,并且通常受益于快速查找替换和IDE代码辅助。我认为你的方法可能有点太复杂,太难读了。
发布于 2015-05-05 04:41:28
事实上,我认为你把自己搞得有点复杂了,因为你可以像这样做一些更容易的事情:
this.getClass().getName()然后,您可以将其重写为:
Logger logger = LoggerFactory.getLogger(this.getClass().getName());就是这样。
https://stackoverflow.com/questions/14204004
复制相似问题