一种日志记录方法及系统技术方案

技术编号:36075413 阅读:54 留言:0更新日期:2022-12-24 10:46
本发明专利技术公开了一种日志记录方法及系统,其方法包括:java web容器生成请求对象和返回对象;日志包装过滤器将请求对象包装成LogRequestProxy类型的对象;日志包装过滤器将返回对象包装成LogResponseProxy类型的对象;当LogRequestProxy类型的对象进入日志记录拦截器时,获取对应的请求参数和请求时间;当LogResponseProxy类型的对象进入日志记录拦截器时,获取对应的返回值、方法名和当前session信息;其系统包括请求生成模块、日志包装过滤模块、日志包装过滤模块和日志记录拦截模块。所述日志记录方法及系统解决了现有的日志记录方式存在记录不全的问题。志记录方式存在记录不全的问题。志记录方式存在记录不全的问题。

【技术实现步骤摘要】
一种日志记录方法及系统


[0001]本专利技术涉及计算机数据处理领域,特别涉及一种日志记录方法及系统。

技术介绍

[0002]市面上有不少的日志记录方式用来记录入参、处理时间和返回结果。但对于java web来说,当处理请求的方法以HttpServletRequest为参数时,由于参数要通过自己调getParameter(“xxx”)等方法去获取,会出现记录不到参数的情况;当http请求为post请求,且不是form表单请求时,由于HttpServletRequest的输入流只能读取一次,会出现记录不到请求体的参数的情况;还会出现记录不到此次请求的session信息的情况;当返回后只能记录到最终返回的页面,但不方便查看请求得到的结果;当参数中有HttpServletResponse类型的对象时,且以该对象的输出流作为返回时,会出现记录不到返回结果的情况;如此,当基于java web时,现有的日志记录方式还存在记录不全的问题。

技术实现思路

[0003]为了克服现有技术存在的缺陷,本专利技术的一个目的在于提供一种日志记录方法,以解决上述的问题;为了克服现有技术存在的缺陷,本专利技术的另一个目的在于提供一种日志记录系统,以解决上述的问题;本专利技术解决其技术问题所采用的技术方案是:一种日志记录方法,包括:请求生成步骤:java web容器根据接收到的http请求生成请求对象HttpServletRequest和返回对象HttpServletResponse;日志包装过滤步骤:日志包装过滤器LogRequestWrapperFilte通过其自身的请求对象日志代理器将请求对象HttpServletRequest包装成LogRequestProxy类型的对象;日志包装过滤器LogRequestWrapperFilte通过其自身的返回对象日志代理器将返回对象HttpServletResponse包装成LogResponseProxy类型的对象;日志记录拦截步骤:当LogRequestProxy类型的对象进入日志记录拦截器LogInterceptor时,获取LogRequestProxy类型的对象对应的请求参数和请求时间并记录到所述请求对象日志代理器的logMap表中;当LogResponseProxy类型的对象进入日志记录拦截器LogInterceptor时,获取LogResponseProxy类型的对象对应的返回值、方法名和当前session信息,并记录到所述返回对象日志代理器的logMap表中;值得说明的是,所述日志记录拦截步骤还包括:所述返回对象日志代理器从所述请求对象日志代理器的logMap表中获取请求参数和请求时间,并根据请求时间计算得到调用时间,其中调用时间=当前系统时间

请求时间;然后将返回值、方法名、当前session信息、参数params和调用时间记录到日志中;具体地,所述日志包装过滤步骤包括:初始化所述请求对象日志代理器,并构造函
数接收请求对象;读取请求对象HttpServletRequest,并将请求对象HttpServletRequest缓存在字节数组中;调用预先重写好的LogRequestProx类型的public ServletInputStream getInputStream()方法,将缓存在字节数组中的请求对象HttpServletRequest重新生成输入流,得到LogRequestProxy类型的对象;优选的,所述日志包装过滤步骤还包括:返回对象日志代理器在初始化时,构造函数接收返回对象;重写LogResponseProxy类型的public void sendRedirect(String location)方法和public PrintWriter getWriter()方法;当public void sendRedirect(String location)方法被调用时,先将location参数作为请求的返回结果记录到返回对象日志代理器的LogMap表中,然后再调用原始返回对象的public void sendRedirect(String location)方法;当public PrintWriter getWriter()方法被调用时,先调用原返回对象的PrintWriter (),得到输出流对象PrintWriter后,将输出流对象封装成日志输出流对象logPrintWriter;在LogPrintWriter类型中重写public void write(String s)方法时,先将参数记录到返回对象日志代理器的LogMap表中,然后再调用原输出流对象PrintWriter对象的public void write(String s)方法完成返回;可选的,所述日志记录拦截步骤还包括:当LogRequestProxy类型的对象进入日志记录拦截器LogInterceptor时,通过preHandle方法,先读取url参数和表单参数,并记录到返回对象日志代理器的LogMap表中;然后读取请求本参数,并记录到返回对象日志代理器的LogMap表中;最后读取记录当前系统时间,将当前系统时间作为请求时间记录到返回对象日志代理器的LogMap表中;其中,所述请求参数包括所述url参数、表单参数和请求本参数;当LogResponseProxy类型的对象进入日志记录拦截器LogInterceptor时,从preHandle方法的参数request的attributtes和modelAndView的modle中获取所有页面模板参数,从preHandle方法的参数modelAndView的view中获取页面模板路径,从参数request中获取路径参数,从参数request中取出当前session信息,从preHandle方法的参数handler中取出对应的方法名,并将当前session信息和方法名记录到所述返回对象日志代理器的logMap表中;值得说明的是,一种日志记录系统,包括请求生成模块、日志包装过滤模块、日志包装过滤模块和日志记录拦截模块;所述请求生成模块用于利用java web容器根据接收到的http请求生成请求对象HttpServletRequest和返回对象HttpServletResponse;所述日志包装过滤模块用于利用日志包装过滤器LogRequestWrapperFilte通过其自身的请求对象日志代理器将请求对象HttpServletRequest包装成LogRequestProxy类型的对象;用于利用日志包装过滤器LogRequestWrapperFilte通过其自身的返回对象日志代理器将返回对象HttpServletResponse包装成LogResponseProxy类型的对象;
所述日志记录拦截模块用于当LogRequestProxy类型的对象进入日志记录拦截器LogInterceptor时,获取LogRequestProxy类型的对象对应的请求参数和请求时间并记录到所述请求对象日志代理器的logMap表中;用于当LogResponseProxy类型的对象进入日志记录拦本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种日志记录方法,其特征在于,包括:请求生成步骤:java web容器根据接收到的http请求生成请求对象HttpServletRequest和返回对象HttpServletResponse;日志包装过滤步骤:日志包装过滤器LogRequestWrapperFilte通过其自身的请求对象日志代理器将请求对象HttpServletRequest包装成LogRequestProxy类型的对象;日志包装过滤器LogRequestWrapperFilte通过其自身的返回对象日志代理器将返回对象HttpServletResponse包装成LogResponseProxy类型的对象;日志记录拦截步骤:当LogRequestProxy类型的对象进入日志记录拦截器LogInterceptor时,获取LogRequestProxy类型的对象对应的请求参数和请求时间并记录到所述请求对象日志代理器的logMap表中;当LogResponseProxy类型的对象进入日志记录拦截器LogInterceptor时,获取LogResponseProxy类型的对象对应的返回值、方法名和当前session信息,并记录到所述返回对象日志代理器的logMap表中。2.根据权利要求1所述的一种日志记录方法,其特征在于,所述日志记录拦截步骤还包括:所述返回对象日志代理器从所述请求对象日志代理器的logMap表中获取请求参数和请求时间,并根据请求时间计算得到调用时间,其中调用时间=当前系统时间

请求时间;然后将返回值、方法名、当前session信息、参数params和调用时间记录到日志中。3.根据权利要求2所述的一种日志记录方法,其特征在于,所述日志包装过滤步骤包括:初始化所述请求对象日志代理器,并构造函数接收请求对象;读取请求对象HttpServletRequest,并将请求对象HttpServletRequest缓存在字节数组中;调用预先重写好的LogRequestProx类型的public ServletInputStream getInputStream()方法,将缓存在字节数组中的请求对象HttpServletRequest重新生成输入流,得到LogRequestProxy类型的对象。4.根据权利要求3所述的一种日志记录方法,其特征在于,所述日志包装过滤步骤还包括:返回对象日志代理器在初始化时,构造函数接收返回对象;重写LogResponseProxy类型的public void sendRedirect(String location)方法和public PrintWriter getWriter()方法;当public void sendRedirect(String location)方法被调用时,先将location参数作为请求的返回结果记录到返回对象日志代理器的LogMap表中,然后再调用原始返回对象的public void sendRedirect(String location)方法;当public PrintWriter getWriter()方法被调用时,先调用原返回对象的PrintWriter (),得到输出流对象PrintWriter后,将输出流对象封装成日志输出流对象logPrintWriter;在LogPrintWriter类型中重写public void write(String s)方法时,先将参数记录到返回对象日志代理器的LogMap表中,然后再调用原输出流对象PrintWriter对象的public void write(String s)方法完成返回。5.根据权利要求4所述的一种日志记录方法,其特征在于,所述日志记录拦截步骤还包
括:当LogRequestProxy类型的对象进入日志记录拦截器LogInterceptor时,通过preHandle方法,先读取url参数和表单参数,并记录到返回对象日志代理器的LogMap表中;然后读取请求本参数,并记录到返回对象日志代理器的LogMap表中;最后读取记录当前系统时间,将当前系统时间作为请求时间记录到返回对象日志代理器的LogMap表中;其中,所述请求参数包括所述url参数、表单参数和请求本参数;当LogResponseProxy类型的对象进入日志记录拦截器LogInterceptor时,从preHandle方法的参数request的attributtes和modelAndView的modle中获取所有页面模板参数,从preHandle方法的参数modelAndView的view中获取页面模板路径,从参数request中获取路径参数,从参数request中取出当前session信息,从preHandle方法的参数handler中取出对应的方法名,并将当前session信息和方法名记录到所述返回对象日志代理器的logMap表中。6.一种日志记录系统,其特征在于,包括请求生成模块、日志包装过滤模块、日志包装过滤...

【专利技术属性】
技术研发人员:李宝君何玉华
申请(专利权)人:全通金信控股广东有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1