【问题标题】:How to get caller class' logger如何获取调用者类的记录器
【发布时间】:2021-09-24 13:54:40
【问题描述】:

我有一个带有静态函数 doSthAndLogIt() 的 util 类。

在里面我想做点什么+记录。

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


更多上下文:

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 作为函数参数传递

【问题讨论】:

    标签: java logging


    【解决方案1】:

    第 1 步:获取调用者类。为避免重复,请参阅此问答:https://stackoverflow.com/a/45811032/2170192

    第 2 步:通过调用者类获取记录器。

    【讨论】:

    • 我想如果我调用Logger.getLogger(Caller.class) 10 次,只会创建一个记录器实例,所以没有性能问题?
    • 没错,如果已经创建了记录器(针对特定类),Logger.getLogger() 将返回现有实例。
    猜你喜欢
    • 2013-11-09
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2010-09-11
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多