我正在用Java编写Web应用程序并使用SLF4J进行日志记录。
我已经厌倦了为每个使用日志记录的类编写以下行:
private static final Logger logger = LoggerFactory.getLogger(ThisClassName.class);
为避免冗余代码,我想的是
interface Loggable {
Logger logger();
}
并且每个类都可以实现此接口,然后像AOP这样的魔术会插入LoggerFactory
部分。
有没有人实现过这个或知道如何实现这个目标?
谢谢!
答案 0 :(得分:12)
${:import(org.slf4j.LoggerFactory, org.slf4j.Logger)}
private final static Logger LOGGER = LoggerFactory.getLogger(${enclosing_type}.class);
这样你就可以输入“logger”,点击 shift + space 就可以了。
答案 1 :(得分:2)
您使用的是CDI吗?如果是这样,创建一个生成器方法,然后@将该记录器注入任何启用CDI的类。
@Produces Logger createLogger(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
请参阅http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html#d0e1662
答案 2 :(得分:0)
在Here中很好地演示了使用AOP进行记录。 似乎没有办法在一个方法中动态插入记录器来记录方法执行的细节。单元测试用例可以解决这个问题。 AOP
可以记录方法调用的记录答案 3 :(得分:0)
如果您在课程上使用@ Slf4j注释,则默认情况下,lombok会生成一个变量“ log”
@Slf4j
public class YourClass {
public void someMethod() {
log.error("Test log");
}
}
查看链接 https://github.com/mplushnikov/lombok-intellij-plugin/issues/154#issuecomment-163940867