应用程序中的日志大致分为三种
第一种:用于生产模式下追中bug的异常日志。(这类日志相信大家都懂)
第二种:用于记录重要操作的行为日志。(这类日志主要作用是溯源,行为主要有三种:增、删、改)
第三种:用于记录历史浏览的消息日志。(这类日志主要记录用户的浏览痕迹)
消息日志和行为日志有点相似,都有溯源的作用,但它们区别很明显。
消息日志记录的是所有操作信息,比如 “gxqsd 登录了 系统 2018-7-27 23:46:10” , "gxqsd 访问了用户管理首页", “gxqsd 查看了 liming 的个人信息”,总而言之他更像一句话,也像是浏览记录,我们针对每一个消息日志存储一个Url就能依次回溯。(所以消息日志不包含对数据的操作,那属于行为日志)
行为日志主要是记录数据的变化,比如 "gxqsd 新增了一个角色 " 这时候触发了新增操作,我们希望将这个行为记录下来,如果只是记录了 “gxqsd 新增了一个角色” 那显然他就有点像消息日志了,但它又不能用于做历史记录。所以作为行为日志最重要的是要记录数据的变化。因此针对 "gxqsd 新增了一个角色”,正确的办法应是将新增的角色实体信息存储下来。
接下来用一张简单的图来描述数据库表之间的关系。
我们定义一个日志记录表Logging,每一行数据表示一条行为日志。用LogDataDetial表示行为日志的详细信息
其中Logging表中TargetId表示实体操作的目标对象,比如"gxqsd create a new user" TableName 则是"User" 而TargetId则表示这个新增的用户的Id,通过Table和TargetId我们最终就能在追溯的时候定位到具体实体。
LogDataDetail表就挺简单的了,Logging表示每一条行为日志,而每一个行为日志所改变的数据是以实体为单位的,实体又有多个字段,为了能详细追踪实体数据的变化,LogDataDetail将实体的每一个属性分解成犹如键值对的形式。又通过LogId将他们与具体行为日志关联起来。而每一个Logging又与操作用户关联起来。
原文地址:https://www.cnblogs.com/Gxqsd/p/9380325.html