asp.net - Asp.net MVC 5 项目中的事件和错误日志记录

标签 asp.net logging asp.net-mvc-5

我正在考虑在我的网站中实现日志记录机制,我希望进行基本的用户操作日志记录。我不想记录他们点击的每个按钮,但我确实想记录他们所做的更改操作。

是否有任何库或文章/教程可以帮助我为我的 asp.net 站点实现良好且高效的日志记录机制。我不确定 MVC5 中是否有任何可能用于日志记录的更改,因为我知道用户身份验证和授权已从 4 更改为 5。

我确信有一个动态库可以在许多不同的情况下工作。

值得拥有:

  • 异步功能
  • 可扩展
  • 使用简单

我正在考虑创建一个自定义过滤器或属性,然后记录用户的操作,但这只是我的想法,我在这里询问执行此操作的标准/行业方法是什么。

最佳答案

没有行业标准。 我使用了过滤器,或者重写了基本 Controller 类上的“onActionExecuting”方法来记录 Controller /操作事件。

编辑::

试图提供更多帮助,但这确实很模糊。 如果您担心错误和类似的事情,请使用 elmah。 对于其他日志记录,请使用 Nlog 或 Log4Net。

如果您尝试进行额外的日志记录,例如审核或类似的操作,您可以使用这些操作的任意组合或自定义的操作。在我的网站中,我创建了一个表,通过创建如下所示的对象来存储网站上的每次点击:

    public class audit
{
    public int ID { get; set; }
    public DateTime AuditDate { get; set; }
    public string ControllerName { get; set; }
    public string ActionName { get; set; }
    public Dictionary<string, object> values
}

在我的基本构造函数中,我重写了 OnActionExecuting 事件:

    protected override void OnActionExecuting(ActionExecutingContext ctx)
    {
        checkForLogging(ctx);

        //do not omit this line
        base.OnActionExecuting(ctx);
    }

假设我想使用新的审核对象记录所有获取请求

  private void checkForLogging(ActionExecutingContext ctx)
    {
        //we leave logging of posts up to the actual methods because they're more complex...
        if (ctx.HttpContext.Request.RequestType == "GET")
        {
                logging(ctx.ActionDescriptor.ActionName, ctx.ActionDescriptor.ControllerDescriptor.ControllerName, ctx.ActionParameters);                
        }
    }

这就是我用操作名称、 Controller 名称和传递到方法中的所有参数填充日志记录对象所需的所有信息。您可以将其保存到数据库、日志文件或您真正想要的任何内容。

重点是它是一件非常大的事情。这只是一种方法,它可能对您有帮助,也可能没有帮助。也许更多地定义一下您到底想要记录什么以及何时执行?

您可以创建自定义属性并用它装饰方法,然后在 OnActionExecuting 方法触发时检查该属性是否存在。然后,您可以获取该过滤器(如果存在)并从中读取内容,并使用它来驱动您的日志记录(如果您愿意)...

关于asp.net - Asp.net MVC 5 项目中的事件和错误日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23053875/

相关文章:

asp.net - 使用 jQuery 将 JSON 对象成功发送到 ASP.NET WebMethod

asp.net-mvc - 种子角色(RoleManager 与 RoleStore)

logging - 不使用命令行为 Protractor/ Jasmine 测试编写日志文件

java - Log4j Windows 事件查看器日志记录

javascript - 动态搜索栏 - 从 ASP.NET MVC5 中的下拉列表中添加元素

asp.net-mvc - 将 MvcSiteMapProvider 与属性和属性路由结合使用

c# - 将经典 asp 应用程序移植到 .NET 时的语言选择

c# - 在 ASP.net 5 MVC 6 中,如何在不同的命名空间中使用相同的 Controller 名称

PHP ASP 分享会

.net - [在此处插入您最喜欢的日志记录库] 与 System.Diagnostics.Trace 相比有什么优势?