登录界面方法

Noo*_*tor 5 java logging slf4j java-8

到目前为止,我一直在研究Java 7,最近又转到了Java-8,令人惊讶的是您可以在Java-8接口中添加方法

到目前为止一切都很好。。。。

现在,我的问题是,这logging是任何开发中必不可少的部分,但是似乎lombok.extern.slf4j不允许您log通过接口方法添加内容,因为只允许在classes和上使用enums

您如何使用log接口方法(如果通过lombok是唯一方法?)?还是不应该记录接口方法?我在这里想念什么?

PS:目前我有工作System.out.println....是啊...这就是小白 :)

小智 17

目前@Slf4j接口不支持Lombok注解,但是可以这样绕过

public interface MyInterface
{
    @Slf4j
    final class LogHolder
    {}

    default void action() {
        LogHolder.log.error("Error TEST");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 以下是已关闭/拒绝的 Lombok 功能请求,以支持接口上的日志记录注释:https://github.com/rzwitserloot/lombok/issues/2584 (2认同)

Ale*_*981 14

您可以手动将记录器添加到您的界面,但您的记录器将是公开的:

public interface SomeInterface {
    Logger log = LoggerFactory.getLogger(SomIface.class);

    default void action() {
        log.info("TEST");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 像“声纳”这样的代码检查器不会建议你这样做。警告“将常量移动到类或枚举。” 仍然存在 (3认同)

pcj*_*zer 7

日志记录是一个实现细节,因此接口不应处理它。如果将日志记录视为接口的责任,则会导致几个问题。例如:

  • 如果有多个类实现,您不知道使用哪一个,因为它们使用相同的名称进行记录。也不可能通过配置中的名称来微调它们的日志级别。
  • 默认方法是公共的,这意味着可以从外部调用它们。这对于日志记录方法来说不是很理想。
  • 记录方法只会污染界面。如果“Map”接口包含这种默认方法,人们会怎么说?'logDebug' 左右。这只是令人困惑并导致不必要的问题。接口应该是符合预期目的的干净 API。

你可以用什么来代替:

  • Lombok 也支持某种委托。(组合优于继承)
  • 某种面向方面的编程技术。有一些框架可以实现这一点,但也可以通过“动态代理”来实现相同的目的。这也与接口有关。