首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iis中使用ASP.NET MVC进行特定于控制器的IIS日志记录

在iis中使用ASP.NET MVC进行特定于控制器的IIS日志记录
EN

Stack Overflow用户
提问于 2014-01-28 21:28:47
回答 2查看 349关注 0票数 0

我只想记录一些控制器(或路由)的访问,因为可以通过选中/取消选中IIS中的“记录访问”复选框来使用传统的ASP.NET页面。

有谁知道这是不是可能的呢?没有自定义日志记录组件的解决方案将是非常棒的!如果你知道如何分享你的知识,请分享;)

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2014-01-28 22:02:31

创建一个BaseController,您想要从中继承数据的控制器将从中继承。然后创建一个覆盖OnActionExecuted方法的ActionFilter,并将其应用于基本控制器。像这样的东西..

代码语言:javascript
复制
public class ActionExecutedFilter : System.Web.Mvc.ActionFilterAttribute
{
    UnitOfWork unitOfWork= new UnitOfWork();

    public override void OnActionExecuted(ActionExecutedContext filter)
    {
        Transaction tran = new Transaction();
        tran.Controller = filter.ActionDescriptor.ControllerDescriptor.ControllerName;
        tran.ActionName = filter.ActionDescriptor.ActionName;
        tran.User = HttpContext.Current.User.Identity.Name;
        tran.Date = DateTime.Now;

        unitOfWork.TransactionRepository.Insert(tran);
        unitOfWork.Save();
    }
}

这将保存到一个名为Transactions的数据库表中,每次在该控制器上调用操作方法时,都会记录用户、控制器和操作方法名称。显然,我只是输入了保存到数据库的UnitOfWork方法,您可以插入任何您喜欢的方法。我通常将这些方法保存在filters文件夹中,添加一个using语句,然后将其添加到控制器中,如下所示;

代码语言:javascript
复制
[ActionExecutedFilter]
public class BaseController : Controller
{
}

同样,只需让所有希望记录数据的控制器继承BaseController即可。

你也可以使用像Log4Net这样的东西,但我发现这样做就能得到我需要的东西。不管你自己怎么想。

http://dotnetdarren.wordpress.com/2010/07/29/logging-in-mvc-part-4-log4net/

票数 0
EN

Stack Overflow用户

发布于 2014-01-28 22:09:13

没有自定义日志组件的解决方案将是非常棒的!

除了基本的IIS诊断日志之外,我无法在IIS中想到任何特定于ASP.Net MVC的日志记录功能。

我想提供的一个简单的解决方案是编写一个HttpModule。在HttpModule中,您可以记录请求。此外,如果你想控制记录什么和不记录什么,那么基于路由,你可以在HttpModule中实现这一点。HttpModule的优点是易于插入和移除。

Make HttpModule work only on certain routes

当涉及到日志记录本身时,您可以在数据库或日志文件中使用自己的自定义逻辑。但您可以选择ELMAHLog4NetEnterprise Logging Application Block

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21406893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档