2011-06-03 48 views
9

我正在使用Java util Logger。根据Logger.getLogger方法的文档,它说:“为一个命名的子系统查找或创建一个记录器,如果一个记录器已经使用给定的名字创建,它将被返回,否则会创建一个新的记录器。”每堂课只召唤一次还会有什么好处吗?使用Logger.getLogger()每次我需要它或每个类创建一次

选项1:

public class Myclass 
    static Logger logger = Logger.getLogger(Myclass.class); 

    public void method1() { 
     logger.log(...); 
    } 

    public void method2() { 
     logger.log(....); 
    } 
} 

选项2:

public class Myclass { 
    public void method1() { 
     Logger.getLogger(Myclass.class).log(...); 
    } 

    public void method2() { 
     Logger.getLogger(Myclass.class).log(...); 
    } 
} 

回答

6

有两个不是非常重要的原因,为什么有一个单一的静态(可能是final)实例比始终调用getLogger要好。

  1. 它使代码稍微容易阅读(在我看来)。
  2. 有一个非常如果您一直致电Logger.getLogger,您将付出的小额罚分。除非你在一个紧密的循环中调用了数百万次,否则它不值得担心,但它在那里。

也就是说,个人偏好远比这两个原因更重要。选项1是一种常用的方法,但是如果您更喜欢选项2,那么一定要使用它。这不会损害你的代码。

+0

@Op De Cirkel的答案确实强调了使记录器为静态的问题 - 在大多数情况下它很好,但是如果您正在编写库代码,那么您可以考虑将其设置为非'静态'。你会得到一个每个实例化的代码来调用Logger.getLogger,但这是可以忽略的。 – 2011-06-06 05:04:09

0

他们不仅有利于我看到的是,较短的日志行使代码看起来更清晰。但是 - 实际上在运行时没有区别

相关问题