【发布时间】:2020-04-29 06:51:43
【问题描述】:
我有一个具有四层的大型单体应用程序,用于满足特定的功能需求。
UI Layer -> Presentation Logic Layer -> Business Logic Layer -> Persistent Layer
呼叫流程的一个最小工作示例可以是,
class ProductViewController {
func showProduct(list){
// populate list in view
}
}
class ProductPresenter {
func sanitiseProduct(list){
// apply presentation logic to list
viewController.showProduct(list)
}
}
class ProductService {
func filerProducts(list){
// apply filtering logic to list
productPresenter.sanitiseProduct(list)
}
}
class ProductDatabase {
func retrieveProducts(){
// retrieve raw product list
productService.filerProducts(getAllProduct())
}
}
现在,如果在流程的任何层(即query exception in Database layer)发生任何异常,我决定使用适当的 TAG 和 info 在每一层记录它并抛出返回上层进行传播,以便在调试时,每一层都可以使用适当的 TAG 过滤自己的日志,而无需查看其他层(即especially when different teams are responsible for different layers)。
在审核时,我的一位同事评论说,在我的设计中,单个异常/错误的日志会重复,这可能会降低性能和内存。他的建议是针对特定异常(即query exception in Persistent Layer only)在其中一层应用日志记录。但是,他建议继续向上层抛出异常。
为了性能和内存,是否应该更改提供更好可维护性的日志记录方法? 处理这种情况的一般建议是什么?
【问题讨论】:
-
处处都在 DEBUG 级别登录。仅当代码采用不同的逻辑路径作为结果时才在 ERROR 级别记录,即不只是重新抛出。但希望你不会得到太多这样的记录,以至于记录它们是一个性能问题。
-
我越想这个问题,我就越意识到它是主观的而不是客观的。我会否决它,但你给了它一个赏金,所以你真的想要一个答案。虽然我赞扬您认真考虑您的问题,但也许 StackOverflow 是错误的地方。我会推荐另一个网站,但我不知道,所以目前你正在做的是最好的行动方案。 :)
标签: logging design-patterns language-agnostic layer