如何从表示层到数据层记录错误

时间:2018-10-16 08:22:22

标签: c# asp.net logging exception-handling

我想通过global.asax文件将项目中的异常记录到数据库中,但是从我的表示层我将无法访问数据层,因为我的表示层通过Web服务与数据层通信,所以我的问题是我创建了将异常记录到我的数据库的服务。

这是我的架构 enter image description here

2 个答案:

答案 0 :(得分:1)

  

我应该创建一个服务来将异常记录到数据库中吗?

不。

如果您的Web服务中发生错误,请将其记录在Web服务中。不要将该错误传播到用户界面,并希望用户界面将该错误报告回相同或另一个Web服务。

这是另一个故事,如果您想报告用户界面中发生的错误。您可以选择通过服务报告此类错误,但是如果该错误与网络相关并且日志服务不可用怎么办?而是尽可能在应用程序本地登录。

答案 1 :(得分:0)

这取决于您所表示的表示层错误的含义。服务器端代码中的错误,例如WebForms的代码在后面?还是用户浏览器中的错误?如果是后者,您显然需要一些基于网络的服务(有很多第三方产品可以通过嵌入一些JavaScript来收集浏览器中的错误)

对于服务器端组件,不要仅仅因为日志记录写入数据库就将日志记录视为数据层的一种机制。将其视为一个横切关注点,此刻恰好通过数据库来实现。我只是跨层使用诸如Log4Net或Serilog之类的标准日志记录库,而不是尝试将其包装在数据层中的自己的抽象中。

通常,您也不想使用与数据访问完全相同的持久性配置进行日志记录。例如,出于诸如备份策略之类的操作原因,通常应将日志记录到单独的数据库中。使用与业务数据访问相同的事务管理机制来注册日志写入也是导致发生错误时意外回滚对日志的写入的一种秘诀,而对错误一无所知。