Eli*_*jah 2 java debugging stack-trace
我想在几个超类上有更详细的日志调试/日志记录输出,因此子类名称实际上不会影响实时性能,也不会影响应用程序逻辑.我也认为通常这样做是相当糟糕的设计,但是我真的希望在开发运行期间记录这些信息.
假设我有一个如下所示的简单类结构,如何将子类的名称拉入超类而不必显式传递引用?
public abstract AbstractClass {
private Logger logger = LoggerFactory.getLogger(getClass());
public AbstractClass() {}
public void execute(ContextObject context) {
if (logger.debuggingEnabled()) {
String invokingClassName = ""; // <-- how do I get this?
logger.debug("Executing {}", invokingClassName);
}
// shared application logic is here...
}
}
public MyClass extends AbstractClass {
public MyClass() {}
@Override
public void execute(ContextObject context) {
super.execute(context);
// application logic...
}
}
Run Code Online (Sandbox Code Playgroud)
我曾经使用过解析堆栈跟踪,我怀疑如果我想要这些信息,那就是我必须走的路线.有谁知道一个库会为我做这个或一个很好的代码片段?
不行this.getClass().getName()吗?即:
public void execute(ContextObject context) {
if (logger.debuggingEnabled()) {
String invokingClassName = ""; // <-- how do I get this?
logger.debug("Executing {}", this.getClass().getName());
}
// shared application logic is here...
}
Run Code Online (Sandbox Code Playgroud)
执行此行时,您已经获得了该信息:
private Logger logger = LoggerFactory.getLogger(getClass());
Run Code Online (Sandbox Code Playgroud)
这意味着您将使用实际类的类别进行记录.由于这些信息是在日志中了,我不认为它使多大意义,也包括它的execute方法.只需确保您的日志输出格式包含类别名称,它应该没问题.