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
MVC增加操作日志的更多相关文章
- MVC 记录操作日志与过滤特殊字符
最近进行的MVC系统需要用到记录操作日志和过滤特殊字符的功能,如果每个action中都调用记录日志的方法就太麻烦了,所以根据需要结合mvc的过滤机制 写了个特殊字符验证与记录操作日志的公用类: pub ...
- linux centos7 增加操作日志记录
2021-08-24 1. 需求产生原因 linux 系统中的日志存放在目录 /var/log/ 下,今天想看看我之前的操作记录,发现系统中的日志并不包括各个用户操作文件的记录,所以打算自己建一个. ...
- asp.net mvc 系统操作日志设计
第一步.系统登录日志 通过signalr来管理用户的登录情况,并保存用户的登录记录. 第二步 通过mvc过滤器,来横切路由访问记录. 保存方式:通过httpclient异步请求webapi 数据通过m ...
- MVC使用 Elmah 日志记录组件
在后台管理中,有一些操作是需要增加操作日志的,尤其是对一些比较敏感的金额类的操作,比如商城类的修改商品金额.删除商品.赠送金额等人工的操作.日志中记录着相关操作人的操作信息,这样,出了问题也容易排查. ...
- ASP.NET MVC中错误日志信息记录
MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...
- 【转】ASP.NET MVC中错误日志信息记录
MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...
- 【开源】OSharp3.0框架解说系列(6.2):操作日志与数据日志
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- SSH基于Hibernate eventListener 事件侦听器的操作日志自动保存到数据库
在spring xml配置文件中添加配置,包含:model.listener 在model中增加需要写入数据库对应表的model 在auditLog.xml配置文件中配置自己项目中,需要进行日志记录的 ...
- Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录
在前面介绍了几篇关于我的权限系统改进的一些经验总结,本篇继续这一系列主体,介绍如何一行代码实现重要表的操作日志记录.我们知道,在很多业务系统里面,数据是很敏感的,特别对于一些增加.修改.删除等关键的操 ...
随机推荐
- php 函数合并 array_merge 与 + 的区别
array_merge()是PHP语言中的一个函数,作用是将两个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面.返回作为结果的数组. 如果输入的数组中有相同的字符串键名,该键的键值为最 ...
- Android服务开发——WebService
我在学习Android开发过程中遇到的第一个疑问就是Android客户端是怎么跟服务器数据库进行交互的呢?这个问题是我当初初次接触Android时所困扰我的一个很大的问题,直到几年前的一天,我突然想到 ...
- 【CF802L】Send the Fool Further! (hard) 高斯消元
[CF802L]Send the Fool Further! (hard) 题意:给你一棵n个节点的树,每条边有长度,从1号点开始,每次随机选择一个相邻的点走,走到一个叶子时就停止,问期望走的总路程. ...
- iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD
原文出处: 容芳志的博客 简介iOS有三种多线程编程的技术,分别是:(一)NSThread(二)Cocoa NSOperation(三)GCD(全称:Grand Central Dispatch) 这 ...
- 在jmeter测试中模拟不同的带宽环境
怎么去测试在手机app中和在web的不同的连接速度对服务器的影响呢? 大部分情况下,手机终端用户通过移动网络访问网站.所以在不同的网络连接数据下,我们的网站或程序可以同时处理多少链接?今天,这篇文件就 ...
- zabbix监控日志文件
环境: 操作系统:centos 6.8 ,zabbix软件版本:zabbix 3.0.1 前提条件:zabbix客户端已经配置了主动模式,如何配置主动模式,请参考此文 监控日志keys 首先要了解k ...
- Linux下搭建Hadoop集群(Centos7.0)
Hadoop集群安装 概述 集群 cluster,将很多任务进程分布到多台计算机上:通过联合使用多台计算机的存储.计算能力完成更庞大的任务.为了实现无限量的存储和计算能力,在生产环境中必须使用集群来满 ...
- PAT甲1038 Recover the smallest number
1038 Recover the Smallest Number (30 分) Given a collection of number segments, you are supposed to r ...
- Ubuntu16.04下安装配置numpy,scipy,matplotlibm,pandas 以及sklearn+深度学习tensorflow配置+Keras2.0.6(非Anaconda环境)
1.ubuntu镜像源准备(防止下载过慢): 参考博文:http://www.cnblogs.com/top5/archive/2009/10/07/1578815.html 步骤如下: 首先,备份一 ...
- 2018-2019-2 20165330《网络对抗技术》Exp2 后门原理与实践
目录 基础问题 相关知识 实验内容 实验步骤 实验过程中遇到的问题 实验总结与体会 实验内容 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell, 任务计划启动 ...