针对大型MVC项目的更好应用范围的日志记录方法

时间:2014-05-20 13:17:17

标签: asp.net-mvc entity-framework logging change-tracking

我正在为大型MVC项目寻找更好的日志记录方法。我试图环顾其他人的建议(例如Log4NetNlogELMAH,EntityFramework的自我追踪和其他一些建议,但找不到合理的建议回答。按术语logging,我并不仅仅意味着记录少量请求或例外等。但请记录属性中的每一个小变化。这就是我寻找一些完美(通用)方法的原因,这种方法可用于多种应用。我需要大致记录为:

public class someModelPerson
{
    public string Name { get; set; }
    public string Age { get; set; }
}

如果通过某些操作,someModelPerson的当前对象被更新,我需要在方法的末尾登录为:

Property Name changed from 'John' to 'Don' by user 'xyz' on 12/12/12

我与EntityFramework selftracking合作并实现了类似和通用(使用模板等)的东西,但微软不再推荐它。 如果解决方案需要相应的一点定制,我没关系。

plus 会建议更好的数据库架构来存储单个模型修改的日志。 (比如update_person方法可能会改变一个人的姓名,年龄,身高。如何在数据库级别记录?单一条目?变更集的单独表格?)

2 个答案:

答案 0 :(得分:1)

您可以使用网站中所述的Postsharp: -

  

PostSharp为所有这些问题提供了解决方案。记录   模式库允许您配置日志记录的位置   执行,模式库接管保持你的   在添加,删除和重构代码库时,日志条目同步。   我们来看看如何为开始和添加跟踪日志记录   完成方法调用。

有关详细信息,请查看此处: -

http://www.postsharp.net/diagnostics/net-logging

答案 1 :(得分:-1)

public class LoggingFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Trace.Write("(Logging Filter)Action Executing: " +
            filterContext.ActionDescriptor.ActionName);

        base.OnActionExecuting(filterContext);
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Exception != null)
            filterContext.HttpContext.Trace.Write("(Logging Filter)Exception thrown");

        base.OnActionExecuted(filterContext);
    }
}