我使用log4j在Java语言中进行日志记录。当我使用log.info(一些消息)时,它会记录调用函数的api和消息,这就是它所做的。但是我这里的案例场景是不同的,我通过代码片段来解释。
ClassA{
void log(String message){
log.info(message);
}
}
ClassB{
classA obj = new classA();
obj.log("hello");
}在这种情况下,当记录时,log4j将在日志文件中记录classA。但我想让它显示classB而不是A。有可能做到这一点吗?
发布于 2017-04-10 18:34:40
您可以再使用一个参数,该参数包含调用时所在位置的类名。
例如:
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
}发布于 2017-04-10 19:22:05
嗯,将Logger对象包装在这样的自定义类中似乎没有必要,而且……如你所见..。它引入了这个你通常不会遇到的问题。
但是,也许可以让它工作。在内部,log4j格式化代码创建一个Exception对象来捕获当前的堆栈跟踪,然后搜索该对象以识别调用的类、方法和源文件/行。您可以做的是修改行为(理想情况下,通过覆盖自定义类中的内容),以便它使用堆栈中通常使用的下一个堆栈框架。
不幸的是,相关的log4j代码都是严重抽象的,很难理解。我需要几个小时才能弄清楚做出必要改变的最佳方式,而且我也不想这么做。(正如我在开始时所说的,你所做的是一个坏主意……)
发布于 2017-05-07 15:15:53
你可以做的是,在创建log4j的构造函数时,传递你想要放在日志和rest中的类名,这是你通常可以做的。
https://stackoverflow.com/questions/43320791
复制相似问题