首页 新闻 会员 周边

请教.Net平台大型业务系统中“日志记录” 的较好解决办法

0
悬赏园豆:20 [已关闭问题]
<h2><a id="ctl03_TitleUrl" class="singleposttitle" href="http://www.cnblogs.com/flyingfish/archive/2009/10/14/1583114.html">请教.Net平台大型业务系统中&ldquo;日志记录&rdquo; 的较好解决办法,类似Java下用AOP方式实现的最好</a></h2> <div>请教.Net平台大型业务系统中&ldquo;日志记录&rdquo; 的较好解决办法,类似Java下用AOP方式实现的最好。</div> <p> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span><br /> </span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>问题:</span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>在安全性要求较高的大中型项目中(例如比如系统中有数百个业务表),对业务表的增、删、改操作均需要记录日志,供后台管理员审计用。</span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>不采用任何设计技巧的话,可能一般人会直接在BLL层ADD、Delete、Update函数中集成日志记录操作,可能的形式是:</span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>Loger.logit(xxx,xxx,xx)。</span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>然而,假设业务类数量较为可观时,例如当有200个业务类时,将出现如下问题:</span></span></div> <div><span>1)、这个语句将至少出现200*3次。</span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>2)、logit函数接受的参数可能后期因审计需要会变化。</span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span><br /> </span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>问题1导致不同用户的代码耦合在一起,致命的是问题2发生时,将要大量重构BLL层类库,几乎每个文件至少要改动几行,即使logit函数仅仅一句话。</span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>如果logit函数需要的是引用类型参数,如果日志记录信息较多,则参数初始化的上下文代码也会会比较可观,改动一点都要动200*3处。</span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span><br /> </span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>解决办法:</span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>Java中成熟的AOP技术对于异常处理、日志记录、权限认证问题解决的很彻底,能将这类问题彻底解耦,开发者组做好相关类,配置好就OK了。</span></span></div> <div><span>但查了一下目前.NET下成熟的AOP框架好像没有,想过用装饰者模式在BLL的类库体系上做点文章,但是又觉得动了牛刀。</span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span><br /> </span></span></div> <div><span style="font-family: 'lucida grande', verdana, arial, geneva, lucida, sans-serif; font-size: small;"><span>故抛出此贴,请高手支招!</span></span></div> </p>
flyingfish的主页 flyingfish | 初学一级 | 园豆:160
提问于:2009-10-14 12:05
< >
分享
其他回答(2)
0

使用AOP往往也需要在设计前就考虑好,否则容易出现问题,这也是目前一些AOP方案的不足之处吧。建议优先评估PostSharp。

滔滔踏浪 | 园豆:155 (初学一级) | 2009-10-14 14:05
0

PostSharp应该能满足大型业务系统的这种,异常处理,日志记录等等。很多大型电子商务网站后台系统就使用这个。确实不错,具体可以参考其官方网站.

James.H.Fu | 园豆:90 (初学一级) | 2009-10-14 16:19
0

Unity啊 怎么没有...

传说中的弦哥 | 园豆:275 (菜鸟二级) | 2011-11-24 12:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册