分层应用程序中异常日志记录的最佳实践,以避免重复的错误日志消息

时间:2013-02-15 06:12:14

标签: java exception logging n-tier-architecture

在具有表示层,服务层和dao层的经典3层应用程序中,什么是确保简洁和不重复的异常报告日志消息的最合适方法。想象一下,你的dao层捕获任何类型的已检查异常(我们将使用Java术语,但适用于其他异常处理语言的概念)并将其转换为带有适当消息的daoexception。是否应该在dao层中同时记录相应的消息(例如,“访问db时发生异常”+ e.getMessage())?然后服务层捕获所有daoexceptions,它本身提供适当的服务层消息,将daoexception(包装它)转换为serviceexception然后重新抛出。服务层是否也应记录捕获的异常?简而言之:

  • dao图层应该记录吗?
  • 应该只是服务层记录吗?
  • 两层都应记录吗?
  • 或者应该考虑每种情况 根据用例/服务电话等逐个案例?

出于这个问题的目的,我忽略了表示层。

3 个答案:

答案 0 :(得分:0)

service layser异常中的stacktrace将包含底层的dao异常,所以我想将它记录在服务层是有意义的。

答案 1 :(得分:0)

这个问题对我来说是主观的。 AFAIK它是由设计决定的。

要回答,你不应该考虑记录呼叫和异常的要求,一些你记录,一些你吃,一些你忽略。对于Web服务或其他组件调用,您当然需要服务层日志记录。我宁愿在你的问题中选择第4个选项。

答案 2 :(得分:0)

我将以最高级别登录。

您是否碰巧使用了Apache的任何Commons库,例如您可能会遇到StringUtils.isBlank()。这些库不会记录任何错误消息,相反,如果需要,它们会将异常抛回给您,您决定处理它,或打印任何有用的调试消息。