我有一个在(廉价)托管公司解决方案上运行的网站。数据库和Web服务器在那里。我想记录我的应用程序上发生的活动,通过层(可能不是那么多的演示文稿)。因此,已经进行了服务调用....业务功能已在BL中运行...数据库调用已执行....异常被捕获。
这些层都是分开的。所以,我想记录到数据库是不明智的,因为我需要从所有层访问数据库。例如,用户选择产品。在服务方法(GetProductById)上,我要记录它已被执行。然后该方法在BL中调用GetProductById。我想在那里登录......最后,我的数据访问器中的GetProductById。我需要在所有层中建立数据库连接。
我正在考虑添加一个暴露一个方法(Log)的小类。并从每一层引用该DLL。并且该DLL接收一条消息,并且具有与DB的连接,使用一种方法 - 写入行。但是,这会是太多的开销吗?每个'Log'事件都是Open database,write,close。这有点重吗?数据库功能强大......但是一次调用可能导致3到30个“Log”事件(这会帮助我找到代码问题)。
独立的记录器类吸引人,因为如果需要,我可以将其更改为文件记录器。但更喜欢查询表格的权力,比如说“ErrorLevel”。什么的。
我唯一的问题是开销。没什么值得担心的吗?
答案 0 :(得分:2)
Logging is a cross cutting concern,所以在“图层”视角中它并没有真正意义。不要担心它是否会碰到数据库。
我建议使用已创建的日志库,而不是创建自己的日志库。因为它已经解决了你所担心的所有这些问题(如何破解它的最佳性能,不占用大量资源等)。 NLog是一个非常好的支持,专门为ASP.NET网站提供支持,并且在其他层中运行良好。它有文件或数据库写作的解决方案。