2

我正在使用 MVC 架构创建一个非常简单的 JSP/Servlets Web 项目。

我有一个先决条件,将使用 log4j 的日志记录添加到项目中。由于我之前没有使用 Log4j 实现日志记录,我想听听一些关于如何以有效方式实现它的提示。

主要关注的是如何在整个项目中共享负责记录的对象,而无需在每次我想写另一条消息时创建一个新对象。那么文件结构和消息组织
呢,将有关基于日期的操作和用户操作的信息写在单独的文件中还是在一个文件中更好?

也许这听起来很奇怪,但我想听听有这方面经验的人的评论,因为我是新手 :)

提前感谢大家!

4

1 回答 1

1

在 log4j 中,每个类别都需要一个记录器对象,而不是每个对象。由于通常您的控制器、服务、daos 等通常是单例的,因此在每个中包括一个记录器对象作为实例变量是可以的。你会写类似的东西

public void MyServiceImpl implements MyService {
    private Logger logger = Logger.getLogger(getClass());

    ....
}

如果您有一堆控制器都需要自己的记录器(服务和 daos 也是如此),您甚至可以将该 Logger 声明放在抽象基础控制器中(服务和 daos 也是如此)。它可以是受保护的字段,也可以是带有 getter 的私有字段,但由于日志记录类别很重要,因此您需要为每个控制器(子)类创建一个记录器。

当然,有太多的记录器是一个有效的问题,所以如果你的类不是单例的,你需要做点别的。如果您要向域对象添加日志记录,并为此创建了数十个或数百个域对象,您不希望为每个域对象创建一个记录器对象。在这种情况下,我使用(并且看到其他人使用)记录器作为类变量,例如:

public void MyDomainObject {
    private static Logger logger = Logger.getLogger(MyDomainObject.class);

    ....
}

就记录“架构”而言,让它遵循您的应用程序架构。如果您在应用程序架构中很好地分离了关注点,并且对所有内容进行了适当的分层,并且为您的类和接口选择了好的名称,那么您的日志记录结构应该遵循。

于 2012-09-16T17:49:07.877 回答