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

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

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

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

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

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

  1. /// <summary>
  2. /// 业务日志
  3. /// </summary>
  4. public class BizActivityLogAttribute : ActionFilterAttribute
  5. {
  6.  
  7. /// <summary>
  8. /// 参数名称列表,可以用, | 分隔
  9. /// </summary>
  10. private readonly string _parameterNameList;
  11.  
  12. //类型名称
  13. private string _activityLogTypeName = "";
  14.  
  15. /// <summary>
  16. /// 活动日志
  17. /// </summary>
  18. /// <param name="activityLogTypeName">类别名称</param>
  19. /// <param name="parm">参数名称列表,可以用, | 分隔</param>
  20. public BizActivityLogAttribute(string activityLogTypeName, string parm)
  21. {
  22. _activityLogTypeName = activityLogTypeName;
  23. _parameterNameList = parm;
  24. }
  25.  
  26. public override void OnActionExecuted(ActionExecutedContext filterContext)
  27. {
  28. var workContext = EngineContext.Current.Resolve<IWorkContext>();
  29.  
  30. if (workContext != null && workContext.CurrentCustomer != null)
  31. {
  32. Dictionary<string, string> parmsObj = new Dictionary<string, string>();
  33.  
  34. foreach (var item in _parameterNameList.Split(',', '|'))
  35. {
  36. var valueProviderResult = filterContext.Controller.ValueProvider.GetValue(item);
  37.  
  38. if (valueProviderResult != null && !parmsObj.ContainsKey(item))
  39. {
  40. parmsObj.Add(item, valueProviderResult.AttemptedValue);
  41. }
  42. }
  43. //日志内容
  44. StringBuilder logContent = new StringBuilder();
  45.  
  46. foreach (KeyValuePair<string, string> kvp in parmsObj)
  47. {
  48. logContent.AppendFormat("{0}:{1} ",kvp.Key,kvp.Value);
  49. }
  50. //******************************************************************************
  51. //这里是插入数据表操作
  52. //步骤:
  53. //1、根据日志类型表的SystemKeyword得到日志类型Id
  54. //2、往日志表里插入数据,logContent.ToString()是内容,内容可以自己拼接字符串,比如:string.Format("删除记录,删除操作者{0}","xxxx");
  55. var _customerActivityService = EngineContext.Current.Resolve<ICustomerActivityService>();
  56. _customerActivityService.InsertActivity(_activityLogTypeName, logContent.ToString(), workContext.CurrentCustomer, workContext.CurrentCustomer.Id);
  57. //******************************************************************************
  58. }
  59. }
  60. }

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

参数写法:

  1. [BizActivityLog("新增激活码", "activateCodeType,filePath")]
  2. public ActionResult Add(int? activateCodeType, string filePath)
  3. {
  4.  
  5. }

模型写法:

  1. [BizActivityLog("删除激活码", "RegNumber,CouponCode,ActivateCodeType,StartCreateDate,EndCreateDate,StartPresentedDate,EndPresentedDate")]
  2. public ActionResult Del(ActivateCodeSearchModel searchModel)
  3. {
  4.  
  5. }

BizActivityLog的第一个参数是SystemKeyword。

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

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

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

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

    最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: pub ...

  2. linux centos7 增加操作日志记录

    2021-08-24 1. 需求产生原因 linux 系统中的日志存放在目录 /var/log/ 下,今天想看看我之前的操作记录,发现系统中的日志并不包括各个用户操作文件的记录,所以打算自己建一个. ...

  3. asp.net mvc 系统操作日志设计

    第一步.系统登录日志 通过signalr来管理用户的登录情况,并保存用户的登录记录. 第二步 通过mvc过滤器,来横切路由访问记录. 保存方式:通过httpclient异步请求webapi 数据通过m ...

  4. MVC使用 Elmah 日志记录组件

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

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

    MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...

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

    MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...

  7. 【开源】OSharp3.0框架解说系列(6.2):操作日志与数据日志

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  8. SSH基于Hibernate eventListener 事件侦听器的操作日志自动保存到数据库

    在spring xml配置文件中添加配置,包含:model.listener 在model中增加需要写入数据库对应表的model 在auditLog.xml配置文件中配置自己项目中,需要进行日志记录的 ...

  9. Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录

    在前面介绍了几篇关于我的权限系统改进的一些经验总结,本篇继续这一系列主体,介绍如何一行代码实现重要表的操作日志记录.我们知道,在很多业务系统里面,数据是很敏感的,特别对于一些增加.修改.删除等关键的操 ...

随机推荐

  1. nginx(二)----ubuntu14.04下启动或重启和关闭nginx

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 *转载请注明出处 */ 一.启动 /usr/local/nginx/sbin/nginx或者cd /usr/ ...

  2. SharePoint 2013部署自定义HttpModule访问SPContext.Current的一个问题

    如果文档库post提交文档时,自定义HttpModule正好有代码访问SPContext.Current属性则会导致上传文档失败.

  3. [HTML5]移动平台的HTML5开发框架

    jQuery Mobile http://jquerymobile.com/ jQTouch http://jqtouch.com/ DHTMLX Touch http://dhtmlx.com/to ...

  4. mac操作

    资料搜集: mac终端 常用命令操作 mac osx常用快捷键一览 mac chrome快捷键

  5. 集成maven和Spring boot的profile 专题

    maven中配置profile节点: <project> .... <profiles> <profile> <!-- 生产环境 --> <id& ...

  6. Java-01-问题解答

    问题一:Java类文件是否只能有一个公有类? 1测试代码: //信1603 李敦岳 20163520 //测试Java是否只能有一个公有类 //2017.10.2 public class Test ...

  7. Keepalived指定文件接收日志

    keepalived默认日志接收文件为/var/log/messages不方便查看,可以指定文件接收日志 修改配置文件/etc/sysconfig/keepalived KEEPALIVED_OPTI ...

  8. ZOJ 3780 - Paint the Grid Again - [模拟][第11届浙江省赛E题]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Time Limit: 2 Seconds      Me ...

  9. This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in

    地址:http://stackoverflow.com/questions/18852983/eclipse-reports-rendering-library-more-recent-than-ad ...

  10. 得到scp命令的完整路径

    奇怪的crontab 遇上shell scp不执行了-CSDN论坛 https://bbs.csdn.net/topics/390593780