如何获取调用者 class' 记录器

How to get caller class' logger

我有一个带有静态函数 doSthAndLogIt() 的实用程序 class。

我想在里面做一些事情 + 记录。

我的问题是,如果不在 doSthAndLogIt(Logger logger) 中将记录器作为参数传递,是否有办法从调用 doSthAndLogIt() 的 class 获取记录器?


更多上下文:

public class UtilClz(){
  // I don't want to use UtilClz's own logger, as caller's info will be lost
  // Logger utilLogger = Logger.getLogger(UtilClz.class);

  public static void doSthAndLogIt(Runnable runnable){
    runnable.run();
    //do logging
    //callerLogger.info(...)
  };
}

public class Caller(){
  Logger callerLogger = Logger.getLogger(Caller.class);

  public void doIt(){
    UtilClz.doSthAndLogIt( () -> doSth() );
  }
}

我想要实现的是,以某种方式让 callerLoggerUtilClz::doSthAndLogIt 中记录消息,而无需将 callerLogger 作为函数参数

传递

第 1 步:获取调用者 class。为避免重复,请参阅此问答:

第 2 步:调用者获取记录器 class。