Logger names can be arbitrary strings, but they should normally be based on the package name or class name of the logged component, such as java.net or javax.swing
谁能给我解释一下这句话?
最佳答案
Logger names can be arbitrary strings, but they should normally be based on the package name or class name of the logged component, such as java.net or javax.swing"
“记录器名称可以是任意字符串 ...”:
public class Foo {
private static final Logger logger = Logger.getLogger("specify logger name here - you can use any logger name you want, even supercalifragilisticexpialidocious");
}
任何需要相同记录器实例的代码只需指定相同的记录器名称(祝你好运,以相同的方式拼写“supercalifragilisticexpialidocious”两次)。
但是,您可能希望更轻松地共享记录器,获取特定类记录器的句柄以进行配置,或者在记录器之间建立层次结构关系(例如,将记录器组织为父项和子项)。类和包已经按层次组织,因此他们建议记录器名称:
“...通常应基于包名或记录组件的类名 ...”
package com.example.stackoverflow;
public class Foo {
private static final Logger logger = Logger.getLogger("com.example.stackoverflow.Foo");
}
现在我可以轻松地从任何地方获取任何类的任何记录器的句柄(我只需要知道它的完全限定类名)。此外,现在 Logger 框架可以查看哪些记录器与哪些记录器相关,例如“com.example.stackoverflow”的记录器是“com.example.stackoverflow.Foo”记录器的父级。
但是如果包名改变了或者你的类名改变了怎么办?下面的代码与上面的代码做的事情完全相同,但冗余更少且更易于维护:
package com.example.stackoverflow;
public class Foo {
private static final Logger logger = Logger.getLogger(Foo.class.getName());
}
现在,如果包发生变化,记录器名称会自动处理。如果类在 IDE 中重命名,IDE 可能会注意到上面 getLogger
调用中的 Foo.class
文字并更新 Foo.class
相应的字面意思。
关于java - java中的记录器相关问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4591370/