我想知道是否有任何方法可以采用某种面向方面的方式来设置C#代码的日志记录。或者,如果代码可以用于自动记录。
目前,代码充斥着Log("Enter method XXX")
和Log("Leaving method XXX")
,这使维护变得非常繁琐。
理想情况下,我希望有一些能够自动执行日志记录的方法,就像为分析库配置库一样。
接下来最好的事情是拥有一些自定义属性,也许我可以使用标记我的方法。这些会在方法的入口和出口处放置一些记录代码。
如果解决方案与EntLib兼容,那将是完美的:)
干杯。
答案 0 :(得分:1)
您可以使用Log4PostSharp。虽然PostSharp已商业化,但我不确定这会是什么样的未来。
答案 1 :(得分:1)
如果您正在使用企业库,那么您拥有所需的一切。看一下这篇文章:http://www.codewrecks.com/blog/index.php/2009/01/31/unity-and-aop-in-enterprise-library/
答案 2 :(得分:0)
您所指的也是一个跨领域的问题,不仅影响您的应用程序,还影响您可能在您的机构安装的其他应用程序。企业块很棒,控制主体的反转对从系统中提取重复代码有很大帮助。但是,如果不在代码中确定要记录事件的某个位置,则无法进行日志记录。例如,例外,登录,注销,数据库操作,受限操作等。如果您使用Enterrpise路由,则通过配置文件和策略完成所有操作。
在我提供的解决方案中,我已将日志记录功能移到了应用程序空间之外,现在它将我开发的每一段代码都放在一边,准备好并等待为我做日志记录。在最后一个项目中,我使用了Enterprise Blocks和Couchdb的组合。 Couchdb确实有助于方面方面,因为它使用REST和Json工作而不会在您的应用程序中过多地编写日志文件的接口只是一些HTML的问题,它真的是一个火灾和忘记类型事件,直到那个糟糕的日子,当你需要搜日志时:)
我在自动化日志记录的应用程序中看到的唯一问题是您使用某种委托进程并将内容传递给它们,这会增加堆栈空间。但这是微不足道的,超出理由。
编程到接口和已定义的接口,你应该没问题。
答案 3 :(得分:0)
我记得关于Interceptors / Proxying记录方法的进入/退出的事情。
Stack Overflow问题 - How do I intercept a method call in C#? 并查看此博客(在同一问题中引用) - http://madcoderspeak.blogspot.com/2005/09/essential-interception-using-contexts.html