首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编程实践: Java Logger (log4j)

编程实践: Java Logger (log4j)
EN

Stack Overflow用户
提问于 2013-01-08 05:04:52
回答 3查看 208关注 0票数 1

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

代码语言:javascript
复制
private static final Logger logger = LoggerFactory.getLogger("ClassName");

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

代码语言:javascript
复制
private static final Logger logger = LoggerFactory.getLogger(Utilities.getInvokingClassName());

Utilities.java

代码语言:javascript
复制
public static String getInvokingClassName()
{
    return new Throwable().getStackTrace()[1].getClassName();
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-08 05:09:01

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

票数 6
EN

Stack Overflow用户

发布于 2013-01-08 05:20:20

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

代码语言:javascript
复制
public class Foo {
    private static final Logger LOG = LoggerFactory.getLogger(Foo.class);
...

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

票数 3
EN

Stack Overflow用户

发布于 2015-05-05 04:41:28

事实上,我认为你把自己搞得有点复杂了,因为你可以像这样做一些更容易的事情:

代码语言:javascript
复制
this.getClass().getName()

然后,您可以将其重写为:

代码语言:javascript
复制
Logger logger = LoggerFactory.getLogger(this.getClass().getName());

就是这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14204004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档