你的位置:首页 > 软件开发 > ASP.net > OSharp3.0框架解说系列(6.2):操作日志与数据日志

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

发布时间:2015-07-27 19:00:05
前言  在《【开源】OSharp框架解说系列(6.1):日志系统设计》中,我们已经设计并实现了一个可扩展的日志系统,只要定义好输出端的Adapter,就可以以任意形式输出日志信息。  在日志开发中,有些日志记录需求是常规需要的,比如操作日志,数据变更日志,系统异常日志等,我们希望 ...

前言

  在《【开源】OSharp框架解说系列(6.1):日志系统设计》中,我们已经设计并实现了一个可扩展的日志系统,只要定义好输出端的Adapter,就可以以任意形式输出日志信息。

  在日志开发中,有些日志记录需求是常规需要的,比如操作日志,数据变更日志,系统异常日志等,我们希望把这些常规需求都集成到OSharp框架当中。有了内置的支持,在做开发的时候,只需要很简单的配置,就可以实现相关需求。

  关于三类日志,这里先简要描述一下:

  • 操作日志:粗略描述系统用户(如管理员、业务人员、会员等)对系统的业务操作,只需要说清楚“XXX用户在XXX时间做了XXX操作”
  • 数据日志:有时候,为了追溯用户的业务操作对系统产生的影响,需要记录数据变更细节,这就是数据日志
  • 系统日志:主要记录系统在运行过程中产生的与业务无关的常规或异常的日志信息,这些日志信息通常由系统维护人员或开发人员查看

日志记录准备

  在OSharp框架中,操作日志与数据日志的记录流程如下图所示:

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

  这里用文字简单描述一下操作日志与数据日志记录的实现思路:

  1. 定义了一个“功能信息记录”的实体,用于提取系统中各个功能点的基础信息(名称、MVC的Area-Controller-Action、功能访问类型(匿名访问-登录访问-特定角色访问)、是否启用功能日志,是否启用数据日志、功能URL等),并配置功能的行为
  2. 定义了一个“实体信息记录”的实体,用于提取系统中各个数据实体类型的基础信息(实体类型全名、实体名称、是否启用数据日志,实体属性信息集),并配置实体的行为
  3. 系统初始化的时候,通过反射加载的程序集,提取并构建各个功能点(主要是MVC的Controller-Action)的功能信息记录,更新到数据库
  4. 系统初始化的时候,通过反射加载的程序集,提取并构建各个实体类型的实体信息记录,更新到数据库中
  5. 利用MVC框架的ActionFilter进行AOP拦截,定义一个专门用于操作日志记录的 OperateLogFilterAttribute ,重写 OnActionExecuted 方法进行操作日志的记录
  6. 操作日志与数据日志记录的详细流程如下:
    1. 在用户的业务操作执行到保存数据的时候(EF执行SaveChanges时),根据操作涉及的实体获取相应的实体信息记录,确定是否创建数据日志,不需创建则跳过
    2. 需要创建时,根据实体的状态(Added-Modified-Deleted),创建各个实体的新增-更新-删除的数据日志信息,并存储到临时缓存中
    3. 执行到 OperateLogFilterAttribute 的 OnActionExecuted 方法的时候,根据ActionExecutedContext 中提供的Area,Controller,Action等信息,查询出当前功能的功能信息记录,确定是否记录操作日志,不需记录则返回
    4. 需要根据功能信息记录,创建操作日志信息,并指定当前用户为日志操作人。
    5. 根据功能信息是否启用数据日志的配置,确定是否记录数据日志,需要记录时,从临时缓存中提取前面创建的数据日志,作为从数据配置到操作日志中
    6. 向系统外部保存操作日志信息,完成操作日志的记录

功能信息与实体信息

  记录各个功能点的功能信息接口定义如下:

 1   /// <summary> 2   /// 功能接口,最小功能信息 3   /// </summary> 4   public interface IFunction 5   { 6     /// <summary> 7     /// 获取或设置 功能名称 8     /// </summary> 9     get='_blank'>string Name { get; set; }10 11     /// <summary>12     /// 获取或设置 区域名称13     /// </summary>14     string Area { get; set; }15 16     /// <summary>17     /// 获取或设置 控制器名称18     /// </summary>19     string Controller { get; set; }20 21     /// <summary>22     /// 获取或设置 功能名称23     /// </summary>24     string Action { get; set; }25 26     /// <summary>27     /// 获取或设置 功能类型28     /// </summary>29     FunctionType FunctionType { get; set; }30 31     /// <summary>32     /// 获取或设置 是否启用操作日志33     /// </summary>34     bool OperateLogEnabled { get; set; }35 36     /// <summary>37     /// 获取或设置 是否启用数据日志38     /// </summary>39     bool DataLogEnabled { get; set; }40 41     /// <summary>42     /// 获取或设置 是否锁定43     /// </summary>44     bool IsLocked { get; set; }45 46     /// <summary>47     /// 获取或设置 功能地址48     /// </summary>49     string Url { get; set; }50   }

原标题:OSharp3.0框架解说系列(6.2):操作日志与数据日志

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录