我打算用log4j one代替旧的记录器。无需直接使用Logger,而是需要创建继承自Logger的新类LocalLogger。这样做的原因-我需要在旧记录器中可用的新记录方法名称。

我有log4j记录器:

protected final Logger logger = Logger.getLogger(getClass());


如何制作可以像Logger一样制作LocalLogger的功能?

如何将C类传递给超级LocalLogger?

LocalLogger的草案:

public class LocalLogger extends Logger{

    protected LocalLogger(String name) {
        super(name);
    }

    public LocalLogger getLocalLogger(Class c)
    {
        return new LocalLoger(???)
    }

}

最佳答案

我建议您在这种情况下不要扩展Logger。而是使用delegation pattern

使用所需的方法创建一个全新的类,但将日志记录调用委托给Logger的内部实例:

public class LocalLogger {

  private final Logger logger;

  public LocalLogger(String name) {
    logger = Logger.getLogger(name);
  }

  public LocalLogger(@SuppressWarnings("rawtypes") Class clazz) {
    logger = Logger.getLogger(clazz);
  }

  public void antiqueLoggingMethod(String msg) {
    logger.info(msg);
  }

  // etc.
}

关于java - 继承log4j Logger,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18148468/

10-12 13:36