260 likes | 433 Views
Presented by 刘林 l ingen.liu @gmail.com 红帽 中国. 日志组件目标. 1 日志组件关注的是与业务相关的日志 2 日志组件的记录存入数据库中,是可查询的 3 日志组件提供了一套允许用户自由定义日志的标签定义 4 日志组件不侵入系统代码,不同业务或其它代码结合. 搭建日志组件. 1 加入日志组件的依赖. 配置 web.xml. 配置如何获取登录用户. 1 如果你使用了框架的权限组件,你只需要将上述代码放入你的 spring 配置中 2 如果你有自己的登录实现方式,定义一个类实现 LogUser 接口,实现以下方法
E N D
Presented by 刘林 lingen.liu@gmail.com 红帽中国
日志组件目标 • 1 日志组件关注的是与业务相关的日志 • 2 日志组件的记录存入数据库中,是可查询的 • 3 日志组件提供了一套允许用户自由定义日志的标签定义 • 4 日志组件不侵入系统代码,不同业务或其它代码结合
搭建日志组件 • 1 加入日志组件的依赖
配置如何获取登录用户 1 如果你使用了框架的权限组件,你只需要将上述代码放入你的spring配置中 2 如果你有自己的登录实现方式,定义一个类实现 LogUser接口,实现以下方法 public String getLoginUserName(HttpServletRequest request);
配置Query • 日志组件中有两个Query • 1) 和你系统有关的Query • --这个Query是用来查询业务相关的数据的Query • 2) 日志组件本身的Query • --这个Query是用于查询日志本身存储的数据
业务Query及日志Query • 1 你可以把它们放入同一个数据库,也可以分开存储,这依据你的项目需要 • 2 它们都是基于JTA实体进行查询及其它操作(后期考虑使用jdbc重写)
加入aspectJ • 日志组件同代码分离的原因所在是因为使用了aspectJ • 把logAspectJ.aj放入你的项目中,位置依据你的maven aspectj插件的配置而定 • 你不需要修改这个文件,它在任何项目中都是通用的
日志实体及表的建立 • 1 实体已经在依赖包中建立,不过你得在你的mapping中加入映射 • <mapping class="com.redhat.auth.log.core.domain.BizLogInfo"/> 2 表结构请参照源代码下的SQL语句
加入日志查询组件 • 日志查询组件是一个提供了默认查询日志的页面查询功能 • 把源代码src/main/resources/log整个文件复制到你的web项目中(它依赖struts2的请求访问) • 通过http://localhost:8080/redamLog/log-index.action • 你便可以访问日志组件的查询页面了
OK,恭喜 • 如果你能顺利看到日志的查询页面,表明你的日志组件配置成功了 • 下一步的工作是定义业务描述了
业务定义及业务描述 • 1 业务定义是指使用annotation方式定义一个业务,它以method为基准,阐述一个method进行了什么样的业务操作 • 2 一个业务描述对应一个业务定义,它用自然语言描述一个业务是做什么 • 业务定义及业务描述具体参考说明文档
业务定义标签 • @LogBizCall • @LogBizExecution • 它们定义在某一个方法上,表明这个方法完成了某个业务,这两个标签的定义是一模一样的 • 区别: • LogBizCall使用call方法,跳出方法外环绕,这有利于避免事务 • LogBizExecution使用executeion方法,没有跳出方法,这有利于那些没有被其它方法调用而是被页面请求的业务定义
业务标签定义 • @LogBizCall(bizDescription="", • bizOperationType="", • failureException="", • dataValue={}, • recordValue={} • )
业务标签详解 • bizDescription • 这个字段描述一个业务所属的模块,比如新增航班业务,这里应该定义为航班计划模块 • 这个字段是必填的 • bizOperationType • 这个字段描述业务本身的行为 • 这个字段必须的
业务标签详解 • failureException • 这个标签定义业务失败的class • 如果抛出的异常是其中的一个,表示这是一个业务上的失败,如权限被否定,不能操作等 • 否则表明这是一个程序级的错误
业务标签定义 • dataValue • 业务数据查询,可定义一个或多个DataValue对象 • 定义一个dataValue对象就会从数据库中查询出一条或多条相对应的记录 • 有关dataValue对象的使用,详细参考 标签说明文档
标签定义 • RecordValue • 记录到日志数据库的值,以名-值形式存储,这些值可以被业务描述文件引用 • 值来源于四种: • 参数,返回值,类属性值,以及DataValue • 你可以定义任意多个或不定义recordValue,recordValue是可以被业务描述引用的
业务描述 • 一个业务描述同一个业务定义相对应,它用自然语言描述一个业务的行为 • 业务描述使用fremarker语法,你可以使用业务定义中的recordValue值,以freemarker变量形式引用它们便可以了
业务描述 • 业务描述文件的路径是 • Src/main/resources/bizLog/{语言}/{业务大类}/{业务小类描述}.ftl • 业务描述支持国际化 • 有关业务描述具体使用,参照业务定义及描述说明文档
实例操作 • 1 新建一个项目,配置日志组件以使能够使用 • 2 使用logBizCall和LogBizExecution定义业务
日志组件预想的改进点 • 加入xml定义方式,使得能够更加与程序脱离 • 现有的datavalue只能以并集的方式查询,考虑能自由定义SQL语句与,或,非等情况 • 业务查询使用hibernate,对于没有实体的系统则不适应,考虑底层改为JDBC
结束 • 谢谢