一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于门面对象的应用服务器日志收集方法及系统与流程

2022-04-16 15:39:20 来源:中国专利 TAG:


1.本发明涉及信息处理领域,尤其涉及一种基于门面对象的应用服务器日志收集方法及系统。


背景技术:

2.现有对应用的输出日志进行统一收集主要有两种方式,一种是应用在输出日志的时候额外进行收集日志的操作,但是这种方式对于之前的旧应用来说需要修改应用代码,如果旧应用很多的话,每一个都要进行修改,工作量较大导致效率较低;另一种是应用输出日志到日志文件中,然后设置定时任务,每隔一段时间查询一次日志文件是否发生了修改,如果发生了修改则对增量的日志进行收集,日志文件是会根据我们设定的条件进行分割的,例如日志文件大小到达阈值、日期变更等,在日志文件进行分割的时候,如果此时日志文件与上一次定时任务查询时的日志文件相比发生了修改,由于这些日志被分割到另外的文件中,从而使下一次定时任务执行时这些修改的日志文件都不能被收集到,从而导致日志缺失。
3.在实际的设计方案中,在不侵入应用代码的情况下收集应用日志通常使用定时轮询日志文件来实现,但由于日志文件存在分割归档的情况,最后一次轮询时间点到分割时间点之间的日志不会被收集到,从而导致日志缺失的情况。
4.因此,现有技术还有待于改进和发展。


技术实现要素:

5.鉴于上述现有技术的不足,本发明的目的在于提供一种基于门面对象的应用服务器日志收集方法及系统,旨在解决收集日志存在缺失情况与收集效率较低的问题。
6.本发明的技术方案如下:
7.一种基于门面对象的应用服务器日志收集方法,其中,包括:
8.启动门面对象获取输出日志;
9.控制门面对象的类对所述输出日志进行收集,得到待加载的收集日志;
10.修改应用服务器的配置,得到配置修改的应用服务器;
11.启动所述配置修改的应用服务器加载所述待加载的收集日志,得到加载后的收集日志。
12.所述基于门面对象的应用服务器日志收集方法,其中,所述修改应用服务器的配置的步骤包括:
13.对数据包进行修改,将修改后的数据包放入应用服务器的目录中。
14.所述基于门面对象的应用服务器日志收集方法,其中,所述控制门面对象对所述输出日志进行收集,得到待加载的收集日志的步骤包括:
15.对日志工厂类的获取日志方法进行修改,得到修改后的日志工厂类;
16.将修改后的获取日志方法返回日志实现类;
17.控制日志实现类通过输出日志类输出日志;
18.控制日志实现类通过收集日志类收集日志,得到待加载的收集日志。
19.所述基于门面对象的应用服务器日志收集方法,其中,所述门面对象的类包括所述修改后的日志工厂类和所述日志实现类。
20.所述基于门面对象的应用服务器日志收集方法,其中,第一文件夹目录、第二文件夹目录和第三文件夹目录中存放有不同的文件,所述启动配置修改的应用服务器加载门面对象的类,得到加载后的收集日志的步骤包括:
21.使用通用类加载器在所述第一文件夹目录中加载;
22.使用应用类加载器在所述第二文件夹目录中加载;
23.使用应用类加载器在所述第三文件夹目录中加载。
24.所述基于门面对象的应用服务器日志收集方法,其中,所述使用通用类加载器在第一文件夹目录中加载的步骤之前,还包括:
25.使用引导类加载器加载;
26.使用系统类加载器加载。
27.所述基于门面对象的应用服务器日志收集方法,其中,所述应用服务器是tomcat;所述门面对象是slf4j。
28.一种基于门面对象的应用服务器日志收集系统,其中,包括:
29.获取模块,用于启动门面对象获取输出日志;
30.收集模块,用于控制门面对象的类对所述输出日志进行收集,得到待加载的收集日志;
31.配置修改模块,用于修改应用服务器的配置,得到配置修改的应用服务器;
32.加载模块,用于启动所述配置修改的应用服务器加载所述待加载的收集日志,得到加载后的收集日志。
33.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述日志收集方法的步骤。
34.一种计算机存储介质,其上存储有计算机程序,其特征在于:该程序被处理器执行时实现所述日志收集方法的步骤。
35.有益效果:本发明提供了一种基于门面对象的应用服务器日志收集方法及系统,其中,所述方法包括:启动门面对象获取输出日志;控制门面对象的类对所述输出日志进行收集,得到待加载的收集日志;修改应用服务器的配置,得到配置修改的应用服务器;启动所述配置修改的应用服务器加载所述待加载的收集日志,得到加载后的收集日志。本发明通过应用服务器加载修改后的门面对象的类的设置方式,实现所有使用门面对象进行输出日志的应用在输出日志时进行额外的收集,提高收集效率且防止日志缺失,从而达到高效收集所有应用日志的效果。
附图说明
36.图1为本发明的基于门面对象的应用服务器日志收集方法的流程图。
37.图2为本发明的应用服务器的类加载器流程图。
具体实施方式
38.本发明提供一种基于门面对象的应用服务器日志收集方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
39.需说明的是,当部件被称为“固定于”或“设置于”另一个部件,它可以直接在另一个部件上或者间接在该另一个部件上。当一个部件被称为是“连接于”另一个部件,它可以是直接连接到另一个部件或者间接连接至该另一个部件上。
40.还需说明的是,本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此,附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
41.现有对应用的输出日志进行统一收集主要有两种方式,一种是应用在输出日志的时候额外进行收集日志的操作,但是这种方式对于之前的旧应用来说需要修改应用代码,如果旧应用很多的话,每一个都要进行修改,工作量较大导致效率较低;另一种是应用输出日志到日志文件中,然后设置定时任务,每隔一段时间查询一次日志文件是否发生了修改,如果发生了修改则对增量的日志进行收集,日志文件是会根据我们设定的条件进行分割的,例如日志文件大小到达阈值、日期变更等,在日志文件进行分割的时候,如果此时日志文件与上一次定时任务查询时的日志文件相比发生了修改,由于这些日志被分割到另外的文件中,从而使下一次定时任务执行时这些修改的日志文件都不能被收集到,从而导致日志缺失。
42.在实际的设计方案中,在不侵入应用代码的情况下收集应用日志通常使用定时轮询日志文件来实现,但由于日志文件存在分割归档的情况,最后一次轮询时间点到分割时间点之间的日志不会被收集到,从而导致日志缺失的情况
43.为了解决上述问题,本发明提供了一种基于门面对象的应用服务器日志收集方法,能够高效收集所有的应用日志且不会出现日志缺失的情况,如图1所示,所述方法包括:
44.步骤s100、启动门面对象获取输出日志。
45.步骤s200、控制门面对象的类对所述输出日志进行收集,得到待加载的收集日志。
46.所述门面对象是slf4j,slf4j是一个为java程序提供日志输出的统一接口,而并不是一个具体的日志实现方案,它必须搭配其他具体的日志实现(例如log4j2,logback等)才能工作。slf4j的核心方法是loggerfactory类(即日志工厂类)的getlogger方法(即获取日志方法),这个方法利用spi机制获取到真正用于输出日志的logger对象。
47.本步骤中具体包括:
48.步骤s210、对日志工厂类的获取日志方法进行修改,得到修改后的日志工厂类;
49.步骤s220、将修改后的获取日志方法返回日志实现类;
50.步骤s230、控制日志实现类通过输出日志类输出日志;
51.步骤s240、控制日志实现类通过收集日志类收集日志,得到待加载的收集日志。
52.日志实现类为自定义的日志实现类,也就是自定义的日志外观类(即
loggerfacade)。loggerfacade对象中有两个属性,reallogger:真正用于输出日志的对象;collectlogger:用于进行日志收集的对象。loggefacade对象输出日志时用reallogger输出日志,用colllectlogger收集日志。
53.上述修改后的日志工厂类(即修改后的loggerfactory类)包含修改后的获取日志方法(即修改后的getlogger方法),将修改后的getlogger方法返回日志外观类,进一步控制loggefacade对象输出日志时用reallogger输出日志,用colllectlogger收集日志。
54.需要说明的是,应用通过日志工厂类获取日志对象,日志工厂类获取reallogger对象,日志工厂类构造loggerfacade对象和colllectlogger对象。loggefacade类的部分代码为:
55.[0056][0057]
本发明通过所述步骤s100、s200利用slf4j使应用在输出日志时进行额外的收集操作。
[0058]
需要说明的是,slf4j只是一个日志标准,并不是日志系统的具体实现,其提供日志接口和提供获取具体日志对象的方法;slf4j的作用是只要所有代码都使用门面对象slf4j,我们就不需要关心其具体实现,最终所有地方使用一种具体实现即可,更换、维护都非常方便。
[0059]
步骤s300、修改应用服务器的配置,得到配置修改的应用服务器。
[0060]
如图2所示,所述应用服务器是tomcat。
[0061]
所述步骤s300具体包括:对数据包进行修改,将修改后的数据包放入应用服务器的目录中。
[0062]
需要说明的是,数据包为slf4j-api.jar包,应用服务器的目录为tomcat的lib目录,将修改后的slf4j-api.jar包放入应tomcat的lib目录中。
[0063]
进一步,在tomcat的context.xml文件中加入《loader delegate="true"/》这个配置。通过配置修改的tomcat,实现优先使用放置在catalina_home/lib中的包,从而实现对所有日志收集的目的。
[0064]
需要说明的是,只要把旧应用中的slf4j-api的包替换成我们修改后的包即可让旧应用拥有日志收集的功能,但每个应用都要修改较为繁琐,通过tomcat的类加载机制可以实现让每个应用都替换slf4j-api包,达到高效收集日志的效果。
[0065]
步骤s400、启动配置修改的应用服务器加载门面对象的类,得到加载后的收集日志。
[0066]
所述门面对象的类包括所述修改后的日志工厂类和所述日志实现类。
[0067]
第一文件夹目录、第二文件夹目录和第三文件夹目录中存放有不同的文件。
[0068]
所述步骤s400具体包括:
[0069]
步骤s410、使用通用类加载器在第一文件夹目录中加载;
[0070]
步骤s420、使用应用类加载器在第二文件夹目录中加载;
[0071]
步骤s430、使用应用类加载器在第三文件夹目录中加载。
[0072]
需要说明的是,第一文件夹目录为catalina_home/lib,第二文件夹目录为web-inf/classes,第三文件夹目录为web-inf/lib;程序运行时根据规范从不同的文件夹目录中加载不同的文件。
[0073]
所述步骤s410之前,还包括:使用引导类加载器加载;使用系统类加载器加载。
[0074]
配置修改的tomcat,类的加载顺序为:使用bootstrap引导类加载器加载;使用system系统类加载器加载;使用common类加载器在catalina_home/lib中加载;使用应用类加载器在web-inf/classes中加载;使用应用类加载器在web-inf/lib中加载。
[0075]
通过应用优先使用catalina_home/lib中的包使得修改后的slf4j-api.jar包会被优先使用,即所有应用都替换了slf4j-api.jar包,从而对所有日志收集防止日志缺失。
[0076]
需要说明的是,在tomcat默认配置下,应用使用loggerfactory时会优先使用web-inf/lib下面的包,类会按照如下顺序进行加载:使用bootstrap引导类加载器加载;使用system系统类加载器加载;使用应用类加载器在web-inf/classes中加载;使用应用类加载器在web-inf/lib中加载;使用common类加载器在catalina_home/lib中加载。
[0077]
在本发明的较佳实施例中,正因为采用了上述的技术方案,通过应用服务器加载修改后的门面对象的类的设置方式,实现所有使用门面对象进行输出日志的应用在输出日志时进行额外的收集,提高收集效率且防止日志缺失,从而达到高效收集所有应用日志的效果。
[0078]
在tomcat的shared目录部署经过修改的slf4j-api.jar,让tomcat的shared类加载器加载修改后的loggerfactory类以及自定义的日志实现类,使得所有使用slf4j进行输出日志的应用在输出日志时能够进行额外的收集操作。
[0079]
需要说明的是,tomcat默认配置下类加载机制没有遵循标准的双亲委派原则,而我们需要tomcat遵循双亲委派原则才能在不侵入应用代码的情况下让应用使用修改后的loggerfactory类,所以需要在tomcat的context.xml文件中加入《loader delegate="true"/》配置来让tomcat遵循双亲委派原则。
[0080]
loggerfactory类的修改主要是修改获取具体日志对象的方法,使之返回我们自定义的logger实现类对象。日志外观类包含了应用打印日志logger对象,以及收集日志的logger对象,从而使得应用在打印日志时使用打印logger对象进行打印日志并使用收集日志logger对象进行收集日志。
[0081]
需要说明的是,loggerfactory类是shared类加载器加载的,而应用打印日志logger类是webapp类加载器加载的,loggerfactory在获取应用打印日志logger对象时先使用
[0082]
thread.currentthread().getcontextclassloader()获取webapp类加载器,再使用反射的方式构造出该logger对象。
[0083]
在上述方法的基础上,本发明还提供了一种基于门面对象的应用服务器日志收集系统,包括:
[0084]
获取模块,用于启动门面对象获取输出日志,其功能如步骤100所述;
[0085]
收集模块,用于控制门面对象的类对所述输出日志进行收集,其功能如步骤200所
述;
[0086]
配置修改模块,用于修改应用服务器的配置,其功能如步骤300所述;
[0087]
加载模块,用于启动所述配置修改的应用服务器加载所述待加载的收集日志,其功能如步骤400所述。
[0088]
在一个实施例中,本发明提供了一种电子设备,该设备可以是终端,包括存储器和处理器,所述存储器存储有计算机程序,其中,所述处理器执行所述计算机程序时实现以下步骤:
[0089]
启动门面对象获取输出日志;
[0090]
控制门面对象的类对所述输出日志进行收集,得到待加载的收集日志;
[0091]
修改应用服务器的配置,得到配置修改的应用服务器;
[0092]
启动所述配置修改的应用服务器加载所述待加载的收集日志,得到加载后的收集日志。
[0093]
在一个实施例中,本发明提供了一种计算机存储介质,其上存储有计算机程序,其特征在于:该程序被处理器执行时实现以下步骤:
[0094]
启动门面对象获取输出日志;
[0095]
控制门面对象的类对所述输出日志进行收集,得到待加载的收集日志;
[0096]
修改应用服务器的配置,得到配置修改的应用服务器;
[0097]
启动所述配置修改的应用服务器加载所述待加载的收集日志,得到加载后的收集日志。
[0098]
综上所述,本发明提供了一种基于门面对象的应用服务器日志收集方法及系统,其中,所述方法包括:启动门面对象获取输出日志;控制门面对象的类对所述输出日志进行收集,得到待加载的收集日志;修改应用服务器的配置,得到配置修改的应用服务器;启动所述配置修改的应用服务器加载所述待加载的收集日志,得到加载后的收集日志。本发明通过应用服务器加载修改后的门面对象的类的设置方式,实现所有使用门面对象进行输出日志的应用在输出日志时进行额外的收集,提高收集效率且防止日志缺失,从而达到高效收集所有应用日志的效果。
[0099]
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献