首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取在Java中调用方法以进行日志记录的类的名称

获取在Java中调用方法以进行日志记录的类的名称
EN

Stack Overflow用户
提问于 2017-04-10 18:28:57
回答 4查看 1.3K关注 0票数 1

我使用log4j在Java语言中进行日志记录。当我使用log.info(一些消息)时,它会记录调用函数的api和消息,这就是它所做的。但是我这里的案例场景是不同的,我通过代码片段来解释。

代码语言:javascript
运行
复制
ClassA{
 void log(String message){
   log.info(message);
   }
}

ClassB{
classA obj = new classA();
obj.log("hello");
}

在这种情况下,当记录时,log4j将在日志文件中记录classA。但我想让它显示classB而不是A。有可能做到这一点吗?

EN

回答 4

Stack Overflow用户

发布于 2017-04-10 18:34:40

您可以再使用一个参数,该参数包含调用时所在位置的类名。

例如:

代码语言:javascript
运行
复制
ClassA{
void log(String message, String className){
// Edit the log4j details
log.info(message);
}
}

ClassB{
classA obj = new classA();
obj.log("hello", this.getClass().getSimpleName()); //here
}
票数 1
EN

Stack Overflow用户

发布于 2017-04-10 19:22:05

嗯,将Logger对象包装在这样的自定义类中似乎没有必要,而且……如你所见..。它引入了这个你通常不会遇到的问题。

但是,也许可以让它工作。在内部,log4j格式化代码创建一个Exception对象来捕获当前的堆栈跟踪,然后搜索该对象以识别调用的类、方法和源文件/行。您可以做的是修改行为(理想情况下,通过覆盖自定义类中的内容),以便它使用堆栈中通常使用的下一个堆栈框架。

不幸的是,相关的log4j代码都是严重抽象的,很难理解。我需要几个小时才能弄清楚做出必要改变的最佳方式,而且我也不想这么做。(正如我在开始时所说的,你所做的是一个坏主意……)

票数 1
EN

Stack Overflow用户

发布于 2017-05-07 15:15:53

你可以做的是,在创建log4j的构造函数时,传递你想要放在日志和rest中的类名,这是你通常可以做的。

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

https://stackoverflow.com/questions/43320791

复制
相关文章

相似问题

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