MVC增加操作日志

在后台管理中,有一些操作是需要增加操作日志的,尤其是对一些比较敏感的金额类的操作,比如商城类的修改商品金额、删除商品、赠送金额等人工的操作。日志中记录着相关操作人的操作信息,这样,出了问题也容易排查。

那么如何高效统一的处理增加这些日志呢?下面,分享一下我的思路及做法。

1、建日志相关表。需要建两个表,一是日志类型表(ActivityLogType),二是日志表(ActivityLog), 相关的表结构如下:

日志类型表:Id,SystemKeyword,Name,Enable (1 自动投标设置 自动投标设置 0)

日志表:Id,ActivityLogTypeId,CustomerId,Comment,CreateTime

2、自定义一个属性类,继承ActionFilterAttribute

    /// <summary>
    /// 业务日志
    /// </summary>
    public class BizActivityLogAttribute : ActionFilterAttribute
    {

        /// <summary>
        /// 参数名称列表,可以用, | 分隔
        /// </summary>
        private readonly string _parameterNameList;

        //类型名称
        private string _activityLogTypeName = "";

        /// <summary>
        /// 活动日志
        /// </summary>
        /// <param name="activityLogTypeName">类别名称</param>
        /// <param name="parm">参数名称列表,可以用, | 分隔</param>
        public BizActivityLogAttribute(string activityLogTypeName, string parm)
        {
            _activityLogTypeName = activityLogTypeName;
            _parameterNameList = parm;
        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            var workContext = EngineContext.Current.Resolve<IWorkContext>();

            if (workContext != null && workContext.CurrentCustomer != null)
            {
                Dictionary<string, string> parmsObj = new Dictionary<string, string>();

                foreach (var item in _parameterNameList.Split(‘,‘, ‘|‘))
                {
                    var valueProviderResult = filterContext.Controller.ValueProvider.GetValue(item);

                    if (valueProviderResult != null && !parmsObj.ContainsKey(item))
                    {
                        parmsObj.Add(item, valueProviderResult.AttemptedValue);
                    }
                }
                //日志内容
                StringBuilder logContent = new StringBuilder();

                foreach (KeyValuePair<string, string> kvp in parmsObj)
                {
                    logContent.AppendFormat("{0}:{1} ",kvp.Key,kvp.Value);
                }
                //******************************************************************************
                //这里是插入数据表操作
                //步骤:
                //1、根据日志类型表的SystemKeyword得到日志类型Id
                //2、往日志表里插入数据,logContent.ToString()是内容,内容可以自己拼接字符串,比如:string.Format("删除记录,删除操作者{0}","xxxx");
                var _customerActivityService = EngineContext.Current.Resolve<ICustomerActivityService>();
                _customerActivityService.InsertActivity(_activityLogTypeName, logContent.ToString(), workContext.CurrentCustomer, workContext.CurrentCustomer.Id);
                //******************************************************************************
            }
        }
    }

3、在要写日志的ActionResult里增加属性标识,很简单,如:

参数写法:

        [BizActivityLog("新增激活码", "activateCodeType,filePath")]
        public ActionResult Add(int? activateCodeType, string filePath)
        { 

        }

模型写法:

        [BizActivityLog("删除激活码", "RegNumber,CouponCode,ActivateCodeType,StartCreateDate,EndCreateDate,StartPresentedDate,EndPresentedDate")]
        public ActionResult Del(ActivateCodeSearchModel searchModel)
        { 

        }

BizActivityLog的第一个参数是SystemKeyword。

那么,最终将会往数据库里增加类型下面的一条记录:

16599 ,804,274075 CustomerId:276638 Phone:18686556492 Amount:1000000 RealName:张三 BankName:中国人民银行 2015-01-21 14:52:02.290

时间: 2024-07-30 17:07:54

MVC增加操作日志的相关文章

MVC 记录操作日志与过滤特殊字符

最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: 1 public class CustomFilterAttribute : ActionFilterAttribute 2 { 3 public CustomFilterAttribute() 4 { 5 IsLog = false; 6 FilterSpecialChar = true; 7 } 8

ASP.NET MVC中错误日志信息记录

MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public class MyExceptionAttribute:HandleErrorAttribute { /// <summary> /// 可捕获异常数据 /// </summary> /// <param name="filterContext"></par

【转】ASP.NET MVC中错误日志信息记录

MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public class MyExceptionAttribute:HandleErrorAttribute { /// <summary> /// 可捕获异常数据 /// </summary> /// <param name="filterContext"></par

系统操作日志设计(转)

前言 我们在做企业管理系统时,有多多少少都有对数据的完整性有所要求,比如要求系统不能物理删除记录,要求添加每一条数据时都要有系统记录.或者更新某条数据都需要跟踪到变化的内容.或者删除数据时需要记录谁删除了,何时删除了,以便误删后可以通过系统的XXX功能来恢复误删的数据. 我将这种功能称为操作日志 为什么要做操作日志? 其实上文也描述了一些,其主要目的就是跟踪到每一个用户在系统的操作行为,如对数据进行查询.新增.编辑或删除甚至是登录等行为.更进一步的理解可以说是对用户使用系统情况的跟踪,对数据的跟

seci-log 1.04 日志分析增加 windows 日志分析

本次升级并没有增加新的告警,而是增加了window的日志分析,主要分析了windows的登录日志和操作日志,这两个比较重要的日志类型,其他日志类型可以作为通用的日志收集功能进行存储查询. Windows系统没有自带的功能支持系统日志进行syslog发送,因此需要依赖第三方工具,这里我们推荐一款非常好用的轻量级日志采集模块:Nxlog,在Windows下部署和配置均十分便捷. 注:本人测试过2008 ,2003 server,理论上2012也是可以的,其他环境没有测试,如果有问题欢迎到群里咨询.

如何实现企业管理系统的操作日志功能

如何实现企业管理系统的操作日志功能 实现思路解析:在做企业管理系统的同时,操作日志这一功能是必不可少的:所谓的操作日志就是记录一个用户从登陆时开始,到退出登陆时结束,记录这一过程中用户的全部操作:这里用.Net MVC为例 第一步:数据库 表1:用户日志(Sys_UserLoginLog) 列名 数据类型 主键/外键 说明 LoginID int 主键 日志ID StaffID int 外键 员工ID operationLog nchar(50) 操作内容 operationDate datet

MVC 增加统一异常处理机制

原文地址:http://www.cnblogs.com/leoo2sk/archive/2008/11/05/1326655.html 摘要      本文将对"MVC公告发布系统"的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法.一个小难题      我们继续完善"MVC公告发布系统",这次,我们的需求是对公告发布功能添加日志记录能力,即在发布公告前,记录一次,在公告发布成功后,再记录一次.然后还要使得其具备异常处理,即

[实战]MVC5+EF6+MySql企业网盘实战(21)——网盘操作日志

写在前面 上篇文章介绍了一个bootstrap的分页插件,这篇将弄一个完整的例子,就以日志分页为例说明如何请求服务端然后进行分页. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像 [Bootstrap]modal弹出

如何使用Logminer来分析具体的DML操作日志

如何使用Logminer来分析具体的DML操作日志在Oracle数据库维护中,常常需要分析原来数据库都做了哪些删除.更新.增加数据的操作,所以一般需要用到Logminer这工具来分析归档日志.环境:AIX5.3+Oracle10.2.0.1   使用IBM的Tivoli Storage Manager把数据库数据.归档日志备份到带库中 1.确定具体时间的DML操作,把相应的归档日志从带库恢复到数据库中2.用Logminer来分析相应的归档日志 一.在sqlplus用sys超级用户登陆数据库中,然