【问题标题】:inheriting log4j Logger继承 log4j Logger
【发布时间】:2013-08-09 14:00:21
【问题描述】:

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

我有 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(???)
    }

}

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    在这种情况下,我建议您不要扩展 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.
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多