C# 扩展Try-Catch功能#

C# 扩展Try-Catch功能#,c#,asp.net-mvc,logging,try-catch,C#,Asp.net Mvc,Logging,Try Catch,我有一个MVC应用程序,在其中我始终使用Try-Catch块,我正在寻找一种基于全局布尔字段实现活动/错误日志记录的简单方法。有人知道我可以“扩展”Try-Catch代码的功能,以便添加我自己的活动/错误日志,而不必遍历和触摸每个块吗 例如: 我想尝试自动将某些项目记录到我的数据库中,如url、操作、ID、参数、IP信息等,。。。 和Catch,以自动将其异常记录到数据库中的另一个表中 想法?推荐 谢谢, Peter我知道没有办法扩展现有的try/catch块。但是,您可以在global.asa

我有一个MVC应用程序,在其中我始终使用Try-Catch块,我正在寻找一种基于全局布尔字段实现活动/错误日志记录的简单方法。有人知道我可以“扩展”Try-Catch代码的功能,以便添加我自己的活动/错误日志,而不必遍历和触摸每个块吗

例如:

我想尝试自动将某些项目记录到我的数据库中,如url、操作、ID、参数、IP信息等,。。。 和Catch,以自动将其异常记录到数据库中的另一个表中

想法?推荐

谢谢,
Peter

我知道没有办法扩展现有的try/catch块。但是,您可以在global.asax中为所有未处理的异常实现全局事件处理程序

void Application_Error(object sender, EventArgs e) 
{
    // Code that runs when an unhandled error occurs
}
除此之外,您可能需要添加一个从所有异常处理程序调用的类


也许可以在
异常上创建一个扩展方法,这样您的全局方法就可以很容易地调用,并且可以访问所有异常详细信息。

日志记录是一个非常常见的交叉关注点,它被称为。这是有道理的,但请注意,这通常不是为.NET开发人员中的胆小鬼准备的。绞尽脑汁是一件很奇怪的事情(我不会假装我成功地做到了这一点)。

最好的方法是通过一个全局处理程序方法来处理每一个错误。。。请不要忘记应用程序错误处理程序,因为它只在未处理的错误中调用,而在catch块中调用。尽管这需要您触摸每个catch块,但您只需触摸一次,从那时起,您可以在一个地方添加全局功能,就像您描述的那样


我喜欢思考的方式是思考问题。处理错误之类的事情(大部分情况下)应该在捕获错误的类之外的其他地方处理。

我不一定建议使用此方法,但Microsoft企业库有一个“块”(即模块),可以帮助管理不同级别的异常。你可以看看他们为创意做了些什么,如果它看起来能满足你的需求,你甚至可以使用它:


创建自定义动作过滤器,并用它装饰控制器或动作方法

然后使用它

public class HomeController : Controller
{
    [LoggingFilter]
    public ActionResult Index() 
    {//...}
}

我想你的意思可能是自动的。这正是我想要的。我认为在Try-Catch中实现它是解决方案,但这正是我所寻找的。非常感谢。我也会投票,但还没有足够的代表。在实际实现中,我将代码添加到Global.asax文件中,并在RegsiterGlobalFilters中调用它
publicstaticvoidregisterglobalfilters(GlobalFilterCollection过滤器){filters.Add(newloggingfilterattribute());}
!再次感谢
public class HomeController : Controller
{
    [LoggingFilter]
    public ActionResult Index() 
    {//...}
}