ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:19.34KB ,
资源ID:9424167      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9424167.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SSH操作日志技术预研.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SSH操作日志技术预研.docx

1、SSH操作日志技术预研操作记录技术预研目录1 摘要 32 需求 32.1 需求描述 33 方案 43.1 数据收集 43.1.1 接口方式 53.1.2 AOP方式 73.2 数据存储 103.2.1 存储机制 104 总结 111 摘要在Zshop系统中有针对网站的特定操作,记录操作日志的需求。 本文针对操作日志的: 数据收集 存储方式 展现方式给出具体的技术分析。2 需求2.1 需求描述针对网站后台的操作进行记录,做关键业务的变更查询使用。日志记录:目前已知针对网站的登录操作和订单变化进行进行记录。登录:记录每次登录和退出的名称、时间等字段级业务信息订单:记录订单从开始到结束的每个状态,记

2、录这些状态变化时的订单字段级别的业务变化信息。日志查询:日志数据需要保存3个月供网站进行查询,3个月以外的数据,不允许网站查询,需要通知产品经理,由产品经理决定。3个月以内的日志数据,允许网站在线查询。日志查询按照日期、模块名称、操作人和关键业务字段进行查询。3月以外数据的查询方式不确定,保证在需要的情况下,能够给网站提供其所需结果即可。在线日志展示网站在线查询日志时,根据业务情况,关联业务信息,进行展示。日志业务数量每个网站预估数量如下:基准值最大值商品数(个)20020000订单数(个/日)12.56000数据库空间可以不考虑数据库空间是否足够的问题3 方案对于上面描述的需求,涉及到的技术

3、点分为数据收集的方式、数据存储的方式和数据展现三个方面,下面分别对这三个方面进行说明: 3.1 数据收集数据收集的方案有两种,定义一个操作记录接口或者使用AOP的方式进行数据收集,下面表格对这两种方式的特点进行了对比:特点操作记录接口AOP技术复杂度技术简单、易于理解技术相对复杂,多数情况下开发人员不需要关心耦合程度操作接口与组件紧密耦合操作记录与应用解耦对现有组件的影响组件需要增加日志接口业务逻辑除特殊需求以外,组件不需要修改业务灵活性能够以比较明确的方式满足业务需求多数操作采用统一的逻辑,个别业务可独立编码,但编码相对复杂综上所述,建议采用AOP的方式进行操作记录的数据收集,能够满足业务的

4、需求且对开发人员透明,具有较低的耦合程度。3.1.1 接口方式给开发人员一个ILogger接口,由开发人员根据具体的需求在必要的时候调用此接口记录操作日志。1.定义接口/日志元数据public class LogMeta private Date logDate = null; private String modelName = null; private String userName = null; private String memo; public LogMeta(String userName,String modelName,Date logDate) userName = u

5、serName; logDate = logDate; modelName = modelName; public Date getLogDate() return logDate; public void setLogDate(Date logDate) this.logDate = logDate; public String getModelName() return modelName; public void setModelName(String modelName) this.modelName = modelName; public String getUserName() r

6、eturn userName; public void setUserName(String userName) this.userName = userName; public String getMemo() return memo; public void setMemo(String memo) this.memo = memo; / 记录日志接口public interface ILogger /* * 记录日志 * param memo */ public void addLog(LogMeta log);2.接口实现public class DBLoggerImpl implem

7、ents ILogger Override public void addLog(LogMeta log) / 插入日志 3.接口调用开发人员直接使用提供的接口记录日志LogMeta log = new LogMeta(username,modelName,new Date();log.setMemo(日志信息);ILogFactory factory = new LogFactoryImpl();ILogger logger = factory.getLogger();logger.addLog(log);3.1.2 AOP方式实现Logging拦截器,利用Spring AOP记录操作记录,

8、允许在需要的时候自定义日志信息。1) 在拦截器中实现记录日志public class MyAdvice implements MethodBeforeAdvice,AfterReturningAdvice,ThrowsAdvice Override public void afterReturning(Object returnValue, Method method, Object arg2,Object target) throws Throwable ClassPathResource resource = new ClassPathResource(spring.aop.xml); X

9、mlBeanFactory beanFactory = new XmlBeanFactory(resource); LogMeta log = null; / 判断是否自定义Log逻辑 BizLogList itcptList = (BizLogList)beanFactory.getBean(myLogList); String bizLogName = itcptList.getHmItcptMap().get(target.getClass().getName(); if(bizLogName!=null) / 自定义log逻辑,取自定义log类 LogTemplate aopMeta

10、= (LogTemplate)beanFactory.getBean(bizLogName); aopMeta.setReturnValue(returnValue); aopMeta.setParams(arg2); aopMeta.setMethod(method); aopMeta.setTarget(target); log = aopMeta.getLogMeta(); else / 无自定义log逻辑,默认逻辑生成log类 StringBuffer memo = new StringBuffer(); memo.append(target=).append(target.getCl

11、ass().getName().append();memo.append(method=).append(method.getName().append(); for(int i=0;iarg2.length;i+)memo.append(param).append(i).append(=).append(arg2i); memo.append(returnValue=).append(returnValue).append(rn); log = new LogMeta(wjx,target.getClass().getName(),new Date(); log.setMemo(memo.t

12、oString(); log.setLogDate(new Date(); log.setModelName(target.getClass().getName(); log.setUserName(system); / 添加日志 LogOper logOper = new LogOperImpl(); logOper.addLog(log); Override public void before(Method method, Object arg1, Object target) throws Throwable / 业务逻辑与afterReturning类似 public void af

13、terThrowing(Method method, Object args, Object target, Throwable ex) / 业务逻辑与afterReturning类似 2) 针对需要记录操作日志的服务配置AOP拦截 myLogTemp IBizOper myAdvice 3) 自定义日志时需要实现的模板类public abstract class LogTemplate / 抽象方法,实现类实现自定义日志 public abstract LogMeta getLogMeta(); protected Object returnValue; protected Object p

14、arams; protected Method method; protected Object target; public void setReturnValue(Object returnValue) this.returnValue = returnValue; public void setParams(Object params) this.params = params; public void setMethod(Method method) this.method = method; public void setTarget(Object target) this.targ

15、et = target; 配置中也可实现对服务中指定方法的拦截,配置方法可以参考Spring文档。4) 多个拦截间传递参数实际业务中可能存在一次请求的多个拦截器间传递参数的需求,由于一个请求在同一个线程内完成,我们可以利用线程局部变量进行参数传递。声明线程局部变量类:public class ThreadParam public static final ThreadLocal localParam; static localParam = new ThreadLocal(); public static ThreadLocal getThreadParam() return localPar

16、am; 在拦截器中设置参数ThreadParam.getThreadParam().set(new Date();在拦截器中取参数Date dtParam = (Date)ThreadParam.getThreadParam().get();3.2 数据存储针对如上需求,数据被收集后,需要存储到服务器上。无论操作记录接口方式还是AOP的方式,其存储的过程是一致的。3.2.1 存储机制存储机制主要分为存入文件或者存入数据库。3.2.1.1 文件存储根据需求,网站有针对多个内容进行复杂查询的需求,从效率上考虑,文件存储的查询会比较慢,可使用内存缓冲文件的内容,但内存占用较大,算法也比较复杂,与数据

17、库存储方式比起来,很不划算,不建议使用。3.2.1.2 数据库存储数据库存储可以将每个操作记录存入各自的数据库中,不同网站,数据库不同;也可以将所有网站的操作记录存入同一数据库中;同一数据库又可有所有网站同一数据表和每个网站独立数据表的差别。针对这几种方案进行对比:特点独立数据库统一数据库独立数据表统一数据库单一数据表数据集中性日志数据分散,独立于不同数据库数据集中于一个数据库,但数据表数量大。数据集中于一个数据库,数据表记录多性能数据最分散,效率最好单个数据库压力大,单个表查询效率与独立数据库近似数据库、数据表压力大,性能最差需求关联业务查询方便,跨网站查询不便关联业务查询不便,跨网站查询方

18、便关联业务查询不便,跨网站查询方便3.2.1.3 数据库备份对于数据备份,目前需求中,要求能够在线查看3个月以内的数据,对于超过时间的数据,能够通过任何技术手段查看到即可,并无明确需求。针对现在的订单和登录业务,查看3个月以外的日志数据的需求可能性很小。现在,我们的数据库已经由操作系统的定时任务完成数据库定时备份的功能。基于如上需求和现状,建议建立系统任务定时由日志数据表中备份数据到独立文件中便于查看,清理日志数据表规定时间以外的数据记录。4 总结综上所述,AOP方式对操作人员更加透明,且在需要的时候能够满足组件定制日志内容的需求,所以建议采用AOP的方式进行数据收集;日志的查询与业务紧密关联,将日志表放在网站数据库中,方便业务查询的需要;定期将日志数据备份到一个文件中,并清理日志数据表,可以保持日志数据表的查询性能同时满足日志查询的需要。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1