1

在我的 PHP Web 应用程序中,我希望能够执行以下日志记录操作:

  1. 将数据库记录写入“error_log”表。
  2. 将数据库记录写入“history_log”表。
  3. 通过 FirePHP 将所有查询记录到 Firebug 控制台。
  4. 使用 FirePHP 将任意数据记录到 Firebug 控制台。

我正在尝试决定更好的架构。我有两个想法。这些哪个更好?我也对别人开放。

设计#1

  • 抽象类 Logger
    • 类 FirebugConsoleLogger
      • 获取实例()
      • 日志(字符串)
    • 类数据库记录器
      • 获取实例()
      • logError(logTypeId,affiliateId,detailsArray)
      • logHistory(logTypeId,affiliateId,detailsArray)

设计#2

  • 类记录器
  • 获取实例()
  • logToFirebugConsole(字符串)
  • 日志错误(字符串)
  • 日志历史(字符串)

编辑这就是我可能会去的。

  • 类 FirebugConsoleLogger
    • 公共 getInstance()
    • 公共日志(字符串)
  • 抽象类 Logger
    • 抽象公共日志(typeId、affiliateId、详细信息)
    • 类错误记录器
      • 公共 getInstance()
      • 公共日志(typeId、affiliateId、详细信息)
    • 历史记录器类
      • 公共 getInstance()
      • 公共日志(typeId、affiliateId、详细信息)
4

1 回答 1

2

我都不会用。我会使用为每个实现实现相同日志方法的设计。所以它看起来像设计#1,但有点不同。

  • 抽象类 Logger
    • 日志(字符串)

为您拥有的每种类型的日志创建后代并覆盖 log 方法。

然后,为特定目的创建一个工厂,因此:

  • 类 QueryLoggerFactory
    • getInstance() // 返回一个 FireBugConsoleLogger 实例
  • 类 ErrorLoggerFactory
    • getInstance() // 返回一个数据库记录器实例
  • 类 HistoryLoggerFactory
    • getInstance() // 返回相同或不同的数据库记录器实例

这样,当您需要记录查询时,您只需调用

QueryLoggerFactory->getInstance()->log($query);

在您的应用程序中,您无需调用特定方法。如果您决定要将查询也存储在数据库中,您只需在工厂中实例化一个不同的记录器。您甚至可以实例化一个将自身记录到其他两个记录器的记录器,这样您就可以将错误存储在 FireBug数据库中。或者您可以实例化一个不记录任何内容的 void 记录器。

于 2011-02-24T17:24:04.833 回答