从默认接口方法进行日志记录
向所有Java大师致敬!
从Java8开始,我们可以在接口中使用默认实现(耶!但是,当您要从默认方法登录时,会出现问题。
我有一种感觉,每次我想在默认方法中记录某些内容时调用.getLogger()是不明智的。
是的,可以在接口中定义静态变量 - 但这对于接口来说不是一个好的做法+它公开了记录器(必须是公共的)。
我目前拥有的解决方案:
interface WithTimeout<Action> {
default void onTimeout(Action timedOutAction) {
LogHolder.LOGGER.info("Action {} time out ignored.", timedOutAction);
}
static final class LogHolder {
private static final Logger LOGGER = getLogger(WithTimeout.class);
}
}
LogHolder对每个人仍然可见,这没有任何意义,因为它不提供任何方法,它应该是接口的内部。
你们有谁知道更好的解决方案吗?:)
编辑:我使用由Logback支持的SLF4J