作者:化工12卓越团支部CUP | 来源:互联网 | 2023-05-20 14:19
向所有Java大师致敬!
从Java8开始,我们可以在接口中使用默认实现(yay!).但是,如果要从默认方法进行日志记录,则会出现问题.
我有一种感觉,每次我想在默认方法中记录某些内容时调用.getLogger()是不明智的.
是的,可以在接口中定义静态变量 - 但这对接口来说不是一个好的做法+它暴露了记录器(必须是公共的).
我现在的解决方案:
interface WithTimeout {
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
1> Holger..:
如果您不想将类LogHolder
公开给公众,请不要将其作为成员类interface
.使它成为成员类没有任何好处,你甚至不保存输入,因为你必须使用持有者类的名称限定字段访问,无论它是成员类还是同一个包中的类:
public interface WithTimeout {
default void onTimeout(Action timedOutAction) {
LogHolder.LOGGER.info("Action {} time out ignored.", timedOutAction);
}
}
final class LogHolder { // not public
static final Logger LOGGER = getLogger(WithTimeout.class);
}