java - java中的记录器相关问题

标签 java logging

来自 java.util.logging.Logger :

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/

相关文章:

java - 我如何以编程方式使 Liferay Portlet 进入全屏模式

python - 使用 python 和 django 中的日志记录用户与网站的交互

java - Nohup 附加输出和错误而不是覆盖

java - 我可以获得 ...args 变量吗?我想制作 MyLog(String format, Object...args)

logging - GOGCTRACE 和采集时间

.net - 如何配置 Microsoft Enterprise Library Logging Application Block 来处理任何日志类别?

java - 使用 JAXB 动态生成类

java - 编辑 javafx 属性上的 getValue() - 监听器未通知

java - org.springframework.beans.factory.BeanCreationException : Error creating bean with name 'projectTaskRepository'

java - 关于Java中类成员的问题