5

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

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

private static final Logger logger = LoggerFactory.getLogger(ThisClassName.class);

为了避免冗余代码,我在想类似

interface Loggable {
    Logger logger();
}

每个类都可以只实现这个接口,然后像 AOP 这样的魔法插入LoggerFactory部分。

有没有人实现这个或知道如何实现这个?

谢谢!

4

4 回答 4

12

你在用日食吗?如果是这样,为什么不使用带有“logger”之类的关键字的代码模板和以下模板:

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

这样你只需输入“logger”,点击shift+space就完成了。

于 2012-11-30T09:03:48.323 回答
2

你在用 CDI 吗?如果是这样,创建一个生产者方法,然后将记录器@Inject 到任何启用 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

于 2013-10-30T18:49:13.493 回答
0

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

于 2012-11-30T09:05:24.043 回答
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

于 2018-10-17T10:22:13.950 回答