Spring mvc控制器中的Log4j:如何删除重复

时间:2012-03-14 08:46:45

标签: spring spring-mvc log4j

在我的Spring MVC webapp中的每个控制器中,都有这一行:

static Logger logger = Logger.getLogger(ControllerName.class);

这有点重复。如何在不重复此行的情况下编写“记录器提供的”控制器?

由于

2 个答案:

答案 0 :(得分:1)

也许你不喜欢它,但我喜欢的Project Lombok之一就是这个。您可以使用@ Log4j(或更好的@ Slf4j)为您的类添加注释,以获得名为 log 不可见记录器。

答案 1 :(得分:0)

第一个建议是为所有控制器提供一个公共基类,其中包含以下行:

public abstract class AbstractBaseController {

    protected Logger logger = Logger.getLogger(this.getClass());

}

请注意,记录器不再是static - 这对单件Spring服务/控制器来说并不是一个问题,但我仍然觉得它有点尴尬。另见:Why do we declare Loggers static final?

它也有点违反OO原则,不允许你继承其他任何东西。这实际上是Java语言的限制,在Scala / 中你可以写:

class SomeController extends BaseController with Logging 

其中BaseController是基类,而Logging trait ,它将logger字段混合到SomeController类。非常方便。