【问题标题】:In which layer should logging of SQL exceptions occur?SQL 异常的日志记录应该发生在哪一层?
【发布时间】:2010-12-19 18:50:55
【问题描述】:

让我们假设我有一个具有以下层的应用程序:UI、控制器、业务逻辑和数据访问层。 UI 与控制器对话,控制器与业务逻辑对话,业务逻辑与数据访问层对话。假设我在数据库中有一个表,其中包含管理员可以用来解决应用程序问题的错误消息和异常。

如果在数据访问层中抛出 SQL 异常(例如,存在网络问题、字符串将被截断等),异常信息在被记录之前应该达到多远?理想情况下,日志将包含来自各个层的消息,这些消息将为开发人员提供足够的信息来追踪问题。数据访问层中的 SQL 异常可以一直扔到 UI 并在那里记录吗?还是应该在本地捕获、记录并重新抛出或包装在另一个自定义异常中?或者数据访问层是否应该返回一个特殊类型,该类型具有指示是否存在问题的标志,如果是,它还附加异常信息。此外,将 SQL 异常/堆栈跟踪信息传递到 UI 是否存在安全问题?

我意识到这对于一个问题来说可能有点主观,但我很好奇专家们是怎么说的。如果您需要澄清,请告诉我。

【问题讨论】:

    标签: language-agnostic


    【解决方案1】:

    任何异常都不应逃出服务层。如果您删除 UI,您是否不希望这些服务仍然正常运行?

    这也很有意义,因为很容易将您的日志记录放入方面并以声明方式将它们应用到服务接口。

    如果自定义异常增加了价值,您可以换行并重新抛出。

    【讨论】:

      猜你喜欢
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      相关资源
      最近更新 更多