Java Log4j2想要记录文件&;主叫号码

Java Log4j2想要记录文件&;主叫号码,java,log4j2,Java,Log4j2,我得到了记录文件路径和行号的方法 但出于某种原因,我必须在包装类中调用与日志相关的方法(原因是我正在将一些自行开发的日志框架连接到log4j2): public类ILogAdapter扩展了CommonLogger{ @凌驾 公共无效信息(字符串标题,可丢弃){ //this.logger=org.apache.logging.log4j.LogManager.getLogger(key); logger.info(标题,可丢弃); } 现在,当我做日志时,调用堆栈和文件的顶部方法和行号总是在

我得到了记录文件路径和行号的方法

但出于某种原因,我必须在包装类中调用与日志相关的方法(原因是我正在将一些自行开发的日志框架连接到log4j2):

public类ILogAdapter扩展了CommonLogger{
@凌驾
公共无效信息(字符串标题,可丢弃){
//this.logger=org.apache.logging.log4j.LogManager.getLogger(key);
logger.info(标题,可丢弃);
}
现在,当我做日志时,调用堆栈和文件的顶部方法和行号总是在这个方法中,我能以某种方式改变这个行为吗

更新:

无论如何,我找到了一种方法来获取调用者的文件/行号,并将其放在mdc上下文中:

private void getLineAndFileOfCaller(){
clearAll();
试一试{
抛出新的非法状态异常();
}捕获(例外情况除外){
最终StackTraceElement[]stackTrace=ex.getStackTrace();
如果(stackTrace.length>3){
最终StackTraceElement StackTraceElement=stackTrace[stackTrace.length-3];
ThreadContext.put(“文件”,Objects.toString(stackTraceeElement.getFileName());
ThreadContext.put(“line”,Objects.toString(stackTraceeElement.getLineNumber());
}
}
}
然后我将桥接方法更改为:

@覆盖
公共void调试(字符串标题、字符串消息){
getLineAndFileOfCaller();
logger.debug(String.format(“[%s]%s”,标题,消息));
}
并将日志模式设置为:


当我打电话的时候

ILogAdapter#调试(java.lang.String,java.lang.String)
我可以获取登录位置的文件和行号,但无法获取控制台中适配器的文件和行号


我不知道这是否是更好的解决方案。

请同时提供当前和预期日志消息的示例,以便于理解。@samabcde是的,我更新了问题,并提供了可能是我找到的解决方案。请同时提供当前和预期日志消息的示例,以便于理解。@samabcde是的,我更新了问题。@samabcde是的,我更新了问题并提供了一个我找到的解决方案。