【问题标题】:How to override LOGGER interface default implementation如何覆盖LOGGER接口默认实现
【发布时间】:2019-03-19 16:21:43
【问题描述】:

我正在使用最终的 Logger LOGGER = LoggerFactory.getLogger(clazz);获取 org.slf4j 的 LOGGER 对象。我在覆盖此类的任何默认实现方法时遇到困难。

我正在尝试覆盖 conrete 类的非静态方法。可以说,类 MyLogger { Logger LOGGER = LoggerFactory.getLogger(clazz); LOGGER.debug("一些消息");现在调试方法是在 LOGGER 类中声明的非静态方法,已经提供了一些具体的实现。这里的问题是,当我尝试搜索引用时,我看到了很多实现类。所以为了覆盖调试方法我应该怎么做

像这样更新了原来的类:

public class MyLogger implements Logger {

 private static final Logger LOGGER = LoggerFactory.getLogger(MyLogger.class);
 public static org.slf4j.Logger init(Class clazz) {
        final Logger loggerOut = LoggerFactory.getLogger(clazz);
        setContainerId();
        LOGGER.debug("Logger is initialized for [{}].", clazz.getName());
        return loggerOut;
    }


    public void debug(String msg, Object arg1)
    {
        LOGGER.debug("My message",arg1);
    }
}

仍然无法得到结果。请建议我在这里缺少什么?

【问题讨论】:

  • 您好,欢迎来到 SO。请阅读tour 并阅读How to Ask 并相应地改进您的问题(即为什么要覆盖方法?究竟是什么方法?没有按预期工作的最佳方法是什么(显示代码)?你的错误是什么?得到?)。照原样,我们无法扣除您遇到的任何问题,因此无法实际帮助您。
  • ... 还有一个小提示:更好地描述您想要实现的目标,然后列出您失败的尝试。这样,人们就可以就实际问题给出答案,而不是修复潜在的有缺陷的方法。 (参见“x-y-问题”)

标签: java logging slf4j


【解决方案1】:

静态方法不能被覆盖。如果你在文档中看到hereLoggerFactory 的功能

【讨论】:

  • 我正在尝试覆盖实现类的非静态方法。可以说,类 MyLogger { Logger LOGGER = LoggerFactory.getLogger(clazz); LOGGER.debug("一些消息");现在调试方法是在 LOGGER 类中声明的非静态方法,已经提供了一些具体的实现。这里的问题是当我尝试搜索引用时看到很多实现类。所以为了覆盖调试方法我应该怎么做
  • 使用公共类 MyLogger 实现 Logger {}。通过这样做,您可以覆盖 Logger 的任何功能。
  • 我希望调试方法的原始实现到位,并且在该实现之上我想做一些更改。如果那是一门课,那么我可以很容易地调用 super.method()。但是在接口的情况下,即使实现类未知,我们如何覆盖呢?
  • @AvniGarg 您不覆盖。你躲起来。即:你的MyLogger类需要实现相同的Interface,在各自的方法中,做你想做的事,然后调用LOGGER.debug("Your meddeled with message")。
  • @Fildor 尝试做同样的事情。但看起来隐藏/覆盖不起作用。
猜你喜欢
  • 2012-12-05
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2016-09-15
  • 2017-05-29
  • 2014-07-07
相关资源
最近更新 更多