Java 登录接口方法

Java 登录接口方法,java,logging,java-8,slf4j,Java,Logging,Java 8,Slf4j,到目前为止,我一直在研究java 7,最近又转到了java-8,令人惊讶的是,您可以使用java-8接口 到目前为止还不错…喜欢这个新东西 现在,我的问题是,日志记录是任何开发的重要组成部分,但似乎不允许通过接口方法添加日志内容,因为它只允许在类和枚举上使用 您如何记录接口方法(如果是通过lombok还是唯一的方法??)?还是不应该记录接口方法?我错过了什么 附言:目前我正在使用System.out.println。。。。是的……这是noob:)您可以手动将记录器添加到界面中,但您的记录器将是公

到目前为止,我一直在研究java 7,最近又转到了java-8,令人惊讶的是,您可以使用java-8接口

到目前为止还不错…喜欢这个新东西

现在,我的问题是,
日志记录
是任何开发的重要组成部分,但似乎不允许通过接口方法添加
日志
内容,因为它只允许在
枚举
上使用

您如何
记录接口方法(如果是通过
lombok
还是唯一的方法??)?还是不应该记录接口方法?我错过了什么


附言:目前我正在使用
System.out.println
。。。。是的……这是noob:)

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

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

    default void action() {
        log.info("TEST");
    }
}

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

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

  • 某种龙目岛也支持的代表团。(组成重于继承)
  • 某种面向方面的编程技术。这方面有框架,但也可以通过“动态代理”来实现。这也与接口有关

目前Lombok
@Slf4j
注释在接口上不受支持, 但它可以像这样规避

public interface MyInterface
{
    @Slf4j
    final class LogHolder
    {}

    default void action() {
        LogHolder.log.error("Error TEST");
    }
}

这是否与
slf4j
log相同?lombok slf4j实际上添加了行
Logger log=LoggerFactory.getLogger(SomIface.class)