首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过实用程序方法检索java中的类的名称?

如何通过实用程序方法检索java中的类的名称?
EN

Stack Overflow用户
提问于 2020-09-11 13:35:50
回答 1查看 23关注 0票数 0

我正在努力减少我的应用程序中的代码行。为了进行日志记录,我在前面的每个类中创建了一个方法来检索类和方法的名称。

代码语言:javascript
代码运行次数:0
运行
复制
    public String currentClassAndMethod() {
    // getStackTrace()[1] method return implementing method name at 1st index
    return "Inside class: " + getClass().getSimpleName() + " in method name: "
            + new Throwable().getStackTrace()[1].getMethodName();

}

上面的方法在实现类(Controller、Service类等)中工作得很好,但是当我把它放在Util类中时,它给出了Util类的名称。

代码语言:javascript
代码运行次数:0
运行
复制
    @GetMapping("/products")
    public List<Product> getProducts() {
    logger.info(ecommUtils.currentClassAndMethod());
    List<Product> productList = productService.getProducts();
    return productList;

}

我不能让这个方法是静态的。我想要实现的是在一个地方定义这个方法,然后从每个类调用这个方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-11 13:55:07

你在这里有一些严重的问题:

  1. 调用getStackTrace()真的很慢。
  2. --您在错误的地方做了这个工作;作为一项规则,您希望日志系统本身来处理这个问题。您的代码应该只是担心哪些字符串需要被记录,以及在什么级别。日志框架的工作是如何呈现这些信息(例如,由日志框架添加日志语句的位置和当前时间,因为example.
  3. getClass()总是返回currentClassAndMethod()方法所在的类,因此不是您想要的。这是可行的:

代码语言:javascript
代码运行次数:0
运行
复制
int nestingLevel = 1;
StackTraceElement elem = new Throwable().getStackTrace[nestingLevel];
return elem.getFileName() + "::" + elem.getMethodName() + "::" + elem.getLineNumber();
// there is elem.getClassName() too if you prefer that.

你就是这么做的..。如果你想做的话。我建议您不要这样做。如果您必须这样做,请注意,如果您在日志基础结构中调用“获取位置”代码,例如在日志处理程序中(我不知道您使用了什么日志框架,所以我必须对其含糊不清),那么您可以大大加快速度--这样,如果您将日志记录设置在一个您忽略的级别上,您就不需要花费昂贵的时间来获取堆栈跟踪,只为了让生成的字符串通过日志记录基础结构,而被完全忽略,因为它低于配置的‘日志在这个级别’。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63848180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档