Java SLF4J,以避免每次都写入LoggerFactory.getLogger(MyClassName.class)

Java SLF4J,以避免每次都写入LoggerFactory.getLogger(MyClassName.class),java,log4j,slf4j,Java,Log4j,Slf4j,我正在用Java编写一个web应用程序,并使用SLF4J进行日志记录 我已经厌倦了为每一个使用日志记录的类写下面的一行: private static final Logger Logger=LoggerFactory.getLogger(ThisClassName.class); 为了避免冗余代码,我想 接口日志{ 记录器(); } 每个类都可以实现这个接口,然后像AOP这样的魔术插入了LoggerFactory部分 是否有人实现了这一点或知道如何实现这一点 谢谢 您正在使用eclipse

我正在用Java编写一个web应用程序,并使用SLF4J进行日志记录

我已经厌倦了为每一个使用日志记录的类写下面的一行:

private static final Logger Logger=LoggerFactory.getLogger(ThisClassName.class);
为了避免冗余代码,我想

接口日志{
记录器();
}
每个类都可以实现这个接口,然后像AOP这样的魔术插入了
LoggerFactory
部分

是否有人实现了这一点或知道如何实现这一点


谢谢

您正在使用eclipse吗?如果是这样的话,为什么不使用带有关键字(如“logger”)的代码模板以及以下模板:

${:import(org.slf4j.LoggerFactory, org.slf4j.Logger)}
private static final Logger LOGGER = LoggerFactory.getLogger(${enclosing_type}.class);

这样,您只需键入“logger”,点击shift+space就可以了。

中很好地演示了使用AOP进行日志记录。 我们似乎无法在方法中动态插入记录器来记录方法执行的细节。单元测试用例可以解决这个问题。
方法调用的日志记录可以由AOP处理

您在使用CDI吗?如果是这样,请创建一个producer方法,然后@injectthelogger到任何启用CDI的类

@Produces Logger createLogger(InjectionPoint injectionPoint) { 
    return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName()); 
}

请参见

如果您在类上使用@Slf4j注释,则默认情况下lombok将生成一个变量“log”

@Slf4j
public class YourClass {
    public void someMethod() {
        log.error("Test log");
    }
}
请参阅链接

准确、简单,并能完成工作。仅为这些琐碎的问题使用AOP是一个疯狂的想法(尤其是当您的项目还没有配置AOP时)