记录器名称可以是任意字符串,但它们通常应基于记录组件的包名称或类名,例如java.net或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");
}
Run Code Online (Sandbox Code Playgroud)
任何想要相同记录器实例的代码都必须指定相同的记录器名称(好运拼写"supercalifragilisticexpialidocious"两次相同).
但是,您可能希望更轻松地共享记录器,获取特定类的记录器以进行配置,或者在记录器之间具有层次关系(例如,将记录器组织到父项和子项中).类和包已经按层次结构组织,因此他们建议使用记录器名称:
"...通常应该基于已记录组件的包名称或类名 ..."
package com.example.stackoverflow;
public class Foo {
private static final Logger logger = Logger.getLogger("com.example.stackoverflow.Foo");
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以轻松地从任何地方获取任何类的任何记录器的句柄(我只需要知道它的完全限定的类名).此外,现在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());
}
Run Code Online (Sandbox Code Playgroud)
现在,如果包更改,则会自动处理记录器名称.如果类是在IDE重命名时,IDE会注意到的Foo.class文字在getLogger上面的调用和更新Foo.class相应的文字.
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |