我认为创建java.util.logging.Logger
实例的常用习惯是:
public class SomeClassName {
private static final Logger LOG = Logger.getLogger(SomeClassName.class.getName());
}
当我重构代码时,我的IDE将管理相应的更改行(例如,更改类的名称)。不过,我仍然不得不重复我的课程名称。我真正想做的是Logger.getLogger(getName())
或Logger.getLogger(class.getName())
,但这不是静态启动中的合法Java。
有没有更好的方法来获取不涉及重复自己的记录器?
答案 0 :(得分:10)
Issue 137 of The Java Specialists' Newsletter处理此问题。它建议应用记录器工厂,它可以检测实际的类名,例如通过生成异常并分析调用堆栈。
我个人认为这比原来的问题更糟糕,但这只是我的2美分。无论如何,技术上它很有趣,所以这里是:
public class LoggerFactory {
public static Logger make() {
Throwable t = new Throwable();
StackTraceElement directCaller = t.getStackTrace()[1];
return Logger.getLogger(directCaller.getClassName());
}
}
...
public class BetterApplication {
private final static Logger logger = LoggerFactory.make();
...
}
答案 1 :(得分:8)
我创建了一个Eclipse代码模板并且每次都使用它。
您只需键入logger
并按 Ctrl + Space 即可将其激活。
答案 2 :(得分:1)
我们这样做:
private Logger log = Logger.getLogger(this.getClass());
答案 3 :(得分:1)
我使用一个名为log4e的插件,这对于记录非常方便。
您可以使用它在记录方法或整个班级之前/之后自动添加 您还可以使用记录器语句自动替换System.out.println 非常方便。
答案 4 :(得分:0)
有一个技巧可以从static
上下文中获取当前类的名称,我不能从内存中引用它,但它涉及在静态块中抛出异常并读取堆栈跟踪以获取名称班上的。然而,这是一个非常黑客,所以在实践中我发现重复自己比玩这样的技巧更好。