我正在为大型MVC项目寻找更好的日志记录方法。我试图环顾其他人的建议(例如Log4Net,Nlog,ELMAH,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
方法可能会改变一个人的姓名,年龄,身高。如何在数据库级别记录?单一条目?变更集的单独表格?)
答案 0 :(得分:1)
您可以使用网站中所述的Postsharp: -
PostSharp为所有这些问题提供了解决方案。记录 模式库允许您配置日志记录的位置 执行,模式库接管保持你的 在添加,删除和重构代码库时,日志条目同步。 我们来看看如何为开始和添加跟踪日志记录 完成方法调用。
有关详细信息,请查看此处: -
答案 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);
}
}