应用程序中的日志大致分为三种
第一种: 用于生产模式下追中 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