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)-一行代码实现表操作日志记录
在前面介绍了几篇关于我的权限系统改进的一些经验总结,本篇继续这一系列主体,介绍如何一行代码实现重要表的操作日志记录.我们知道,在很多业务系统里面,数据是很敏感的,特别对于一些增加.修改.删除等关键的操 ...
随机推荐
- datatable 使用LAMBDA表达查询,过滤
DataTable dt = new DataTable(); DataColumn dc = new DataColumn("UserName", System.Type.Get ...
- jQuery属性操作(二)
挂载到$上的几个属性操作方法分析,发现属性操作用到了sizzle封装的方法 attr: function( elem, name, value ) { var hooks, ret, ...
- sencha touch Button Select(点击按钮进行选择)扩展
此扩展基于官方selectfield控件修改而来,变动并不大,使用方法类似. 代码如下: Ext.define('ux.SelectBtn', { extend: 'Ext.Button', xtyp ...
- oracle数据库用户加锁和解锁
oracle数据库安装好之后,scott之类的用户默认情况下是被锁住的,无法使用scott用户登录数据库.使用有alter user数据库权限的用户登陆,角色选sysdba,执行以下命令: 解锁命令: ...
- [转]Windows上搭建Kafka运行环境
[转]http://www.cnblogs.com/alvingofast/p/kafka_deployment_on_windows.html Windows上搭建Kafka运行环境 完整解决方 ...
- ++ fatal error C1083: 无法打开预编译头文件:“.\Debug\router.pch”
一.出现此错误首先检查:stdafx.cpp文件上右键——属性,预编译头选“创建”,其它cpp选“使用”. 二.如果是采用这样的设置,还是有错误,重新生成解决方案,重新调试. 三.实在不行的话,步骤/ ...
- nodejs事件的监听与事件的触发
nodejs事件(Events) 一.事件机制的实现 Node.js中大部分的模块,都继承自Event模块(http://nodejs.org/docs/latest/api/events.html ...
- svn和git的优缺点
git官网api: https://git-scm.com/docs 一. 集中式vs分布式 1. Subversion属于集中式的版本控制系统集中式的版本控制系统都有一个单一的集中管理的服务器,保存 ...
- Visual Studio启用64位 IIS Express 解决 x64位的dll 而出现 未能加载文件或程序集“xxxxxxxx”或它的某一个依赖项。试图加载格式不正确的程序。
- 一般图的着色 - [Welch Powell法][贪心]
原本这是离散数学的期末作业,因为对图论比较熟悉,就先看了一下图论题: 引用<离散数学(左孝凌版)>(其实就是我们的离散数学课本……): 用韦尔奇·鲍威尔法对图G进行着色,其方法是: a)将 ...