CN112596993B - 日志分层方法、系统、可读存储介质及计算机设备 - Google Patents
日志分层方法、系统、可读存储介质及计算机设备 Download PDFInfo
- Publication number
- CN112596993B CN112596993B CN202011492776.1A CN202011492776A CN112596993B CN 112596993 B CN112596993 B CN 112596993B CN 202011492776 A CN202011492776 A CN 202011492776A CN 112596993 B CN112596993 B CN 112596993B
- Authority
- CN
- China
- Prior art keywords
- log
- loggeradapter
- printing
- agents
- stored
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1734—Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/185—Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种日志分层方法、系统、可读存储介质及计算机设备,涉及文件管理技术领域,该日志分层方法包括以下步骤:在多个日志组件中分别抽象出agent;工厂对象获取所述日志组件中抽象得到的所述agent;所述agent通过日志头获取对应的储存位置;打印接口分别适配不同的所述agent,并通过所述agent进行日志打印。本发明能够解决现有技术中日志输出未分层,导致取证工作困难的问题。
Description
技术领域
本发明涉及文件管理技术领域,具体涉及一种日志分层方法、系统、可读存储介质及计算机设备。
背景技术
在一个完整的系统开发过程中,日志系统是非常重要的功能组成部分,它可以记录下系统的运行行为,并按照某种规范表达出来。开发人员、运维人员等可以根据日志所记录的信息对系统进行排错,以优化系统性能。在安全领域,日志可以反映出很多安全攻击行为,例如登录错误、异常访问等,日志已然成为了事故发生后最直接的取证来源。
例如在MVC开发模式之前,开发者们代码冗杂一堆、杂乱无章导致开发人员在开发的过程中身心疲惫,一个简单的功能可能需要大把的时间去整理代码的逻辑,直到MVC模式的出现,让代码开发责任化,不同层级之间互不影响,让逻辑的梳理更加轻松。
在此,MVC开发模式的出现导致开发的效率提升,但是日志作为系统开发的重要部分,却没有得到应有的重视,日志杂乱无章,使得后期取证成为一件十分困难的事情,所以日志的分层迫在眉睫了。
发明内容
针对现有技术的不足,本发明的目的在于提供一种日志分层方法,旨在解决现有技术中日志输出未分层,导致取证工作困难的问题。
为了达到上述目的,本发明通过以下技术方案来实现:一种日志分层方法,所述方法包括以下步骤:
在多个日志组件中分别抽象出agent;
工厂对象获取所述日志组件中抽象得到的所述agent;
所述agent通过日志头获取对应的储存位置;
打印接口分别适配不同的所述agent,并通过所述agent进行日志打印。
与现有技术相比,本发明的有益效果在于:在本发明提供的slf4的日志分层方法中,在具体实施例时,多个日志组件中分别抽象出agent,每个agent通过日志头名称进行储存,不同层级的agent分别对应设有打印接口,通过打印接口连接不同的agent即可对应打印不同层级的日志,以最终实现日志的分层输出。这将使得日志具有十分清晰的层级,以便于后期取证工作的顺利进行。
根据上述技术方案的一方面,该日志分层方法还包括:
定义各日志层级,每层所述日志层级对应设置所述打印接口,所述打印接口内存放有LoggerAdapter。
根据上述技术方案的一方面,定义各日志层级,每层所述日志层级具有相对应的接口,所述接口内存放有LoggerAdapter的步骤之后还包括:
获取不同所述日志层级的所述LoggerAdapter,通过所述接口操作所述LoggerAdapter进行日志输出。
根据上述技术方案的一方面,该日志分层方法还包括:
工厂模式下创建LoggerAdapter,并建立LoggerAdapterFactory,且所述LoggerAdapterFactory中存放有所述LoggerAdapter和所述日志层级的映射。
根据上述技术方案的一方面,该日志分层方法还包括:
判断每个所述日志层级中相对应的所述LoggerAdapter是否存在;
若否,则再次创建所述LoggerAdapter并存入Map中返回。
根据上述技术方案的一方面,该日志分层方法还包括:
创建所述LoggerAdapter时传入所述日志层级的LogType,并根据所述LogType类型的所述LoggerAdapter调用LogAgent进行日志框架层级及日志配置的获取。
根据上述技术方案的一方面,该日志分层方法还包括:
所述LoggerAdaperFactory通过updateRoutes更新自身的LOGGER_HOLDERS和LOGGER_ROUTES属性,并存放用户指定的LoggerAdaper和Router。
基于同样的技术问题,本发明还提供了一种日志分层系统,该日志分层系统包括:
定义模块,用于在多个日志组件中分别抽象出agent;
获取模块,工厂对象获取所述日志组件中抽象得到的所述agent;
存储模块,所述agent通过日志头获取对应的储存位置;
打印模块,打印接口分别适配不同的所述agent,并通过所述agent进行日志打印。
本发明还提供了一种可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现上述日志分层方法的步骤。
本发明还提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述日志分层方法。
本发明的附加方面与优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述与/或附加的方面与优点从结合下面附图对实施例的描述中将变得明显与容易理解,其中:
图1为本发明第一实施例中日志分层方法的流程图;
图2为本发明第二实施例中日志分层方法的流程图;
图3为本发明第二实施例中日志分层方法初始化配置的流程图;
图4为本发明第二实施例中日志分层方法运行的流程图;
图5为本发明第三实施例中日志分层系统的结构框图;
图6为本发明第五实施例中计算机设备的结构图。
具体实施方式
为使本发明的目的、特征与优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。附图中给出了本发明的若干实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
需要说明的是,当元件被称为“固设于”另一个元件,它可以直接在另一个元件上或者也可以存在居中的元件。当一个元件被认为是“连接”另一个元件,它可以是直接连接到另一个元件或者可能同时存在居中元件。本文所使用的术语“垂直的”、“水平的”、“左”、“右”、“上”、“下”以及类似的表述只是为了说明的目的,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造与操作,因此不能理解为对本发明的限制。
在本发明中,除非另有明确的规定与限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的与所有的组合。
图1为本发明第一实施例中日志分层方法的流程图,如图1所示,该日志分层方法包括以下步骤:
S10、在多个日志组件中分别抽象出agent;
其中,agent为一种概念,在软件工程中没有实体特征,日志的Agent里面定义了基础的功能,例如日志的info级别日志输出,debug级别日志输出等等,同时也依托于java的多态性,父对象可以根据当前赋值给它的子对象的特性以不同的方式运作;
S20、工厂对象获取日志组件中抽象得到的agent;
其中,工厂对象即工厂模式下的操作主体,工厂对象可以为多个;
S30、agent通过日志头获取对应的储存位置;
其中,在工厂对象获取到日志组件中的agent时,agent通过agent的日志头将其储存在相应的位置;
S40、打印接口分别适配不同的agent,并通过agent进行日志打印;
其中,该打印接口通过适配不同层级日志相对应的agent,即实现了日志的分层,通过agent进行日志打印,即实现了日志的分层输出,以便于后期取证工作的顺利进行。
在具体实施例时,多个日志组件中分别抽象出agent,每个agent通过日志头名称进行储存,不同层级的agent分别对应设有打印接口,通过打印接口连接不同的agent即可对应打印不同层级的日志,以最终实现日志的分层输出。
图2为本发明第二实施例中日志分层方法的流程图,如图2所示,本实施例总体根据设计模式-适配器模式进行设计。
适配器模式,将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。例如,各国使用的电压各不相同,有110V和220V等,但是我们的笔记本却可以直接使用。原因是电源适配器把电源转换成我们所需要的电压。在本申请中,因为需要对不同的日志框架进行支持,定义了适配器模式方便我们统一使用。下面对适配器的各种主要组件进行说明。
LogAgent是日志头的抽象接口,该类就是日志实际功能的抽象,也就是上文中的电压,所以logAgent里面定义了基础的功能,例如日志的info级别日志输出,debug级别日志输出等等。同时也依托于java的多态性,父对象可以根据当前赋值给它的子对象的特性以不同的方式运作,我们可以通过logagent操作实际的实现方法。
Slf4jAgent就是LogAgent的实现类,也就是前文所说的110V和220V实际的形式。假设以后出现了A日志框架,我们也只需要定义一个ALogAgent实现LogAgent,使用Java多态的性质通过操作LogAgent对象来根据当前赋值给他的ALogAgent特性方式运作。
LogRoute是Log的一个路由组件,也是Java的一个枚举类,其中定义了Slf4j枚举和他的序号(该序号在后面LoggerAdapter中作为他的身份标识且需从0开始以1为步长进行递增),如果用户需要对日志进行扩展,可以增加LogRoute的枚举,分配一个身份序号。
LoggerAdapter作为日志的适配器,他需要的功能是用户对只需要操作LoggerAdapter对象,就可以接入不同的LogAgent实现。LoggerAdapter中定义了一个LogAgent的数组,和一个默认的LogRoute路由。在创建LoggerAdapter的时候,会根据LogRoute中枚举的数量来定义LogAgent数组的大小,并且通过传入的LogRoute确定使用的实际LogAgent。例如:LogRoute中定义了2个枚举A(0)和B(1)(字母标识实际框架名字,数字表示序号),创建LoggerAdapter会创建一个大小为2的LogAgent数组,创建两个LogAgent的A对象和B对象并且根据序号决定他们在数组中的位置,再由默认的LogRoute中的序号决定每次使用的过程中实际的使用对象,但是这些操作对用户使用来说是隐藏的。
现在为止我们实现了通过操作LoggerAdapter可以操作不同的日志框架,接下来我们要解决的是使用LoggerAdapter实现不同级别的输出。由于我们实际的日志框架的输出是由框架决定,对我们来说是不可控的,同上文中的我们通过电源适配器,但是我们不能控制220V或者110V到底如何工作一样,这样我们就需要针对不同的框架进行不同的配置,接下来我们会以Slf4j的具体日志实现框架LogBack框架进行讲解。
本实施例所示的日志分层方法包括以下步骤:
S11、定义各日志层级,每层日志层级对应设置打印接口,打印接口内存放有LoggerAdapter;
其中LoggerAdapter为日志的适配器,用于将一个类的接口转换成客户希望的另一个接口;例如,各国使用的电压各不相同,有110V和220V等,但是笔记本电脑却可以通用,这是因为笔记本电脑的电源适配器能够将电源转换成我们所需要的电压。在本实施例所示的日志分层方法中,因为需要对不同的日志框架进行支持,首先定义了适配器模式以便于统一使用。
其中,LoggerAdapter的创建方法需要传入两个参数,日志的日志头名称和日志的默认路由,然后在创建过程中会遍历LogRoute的枚举,创建对应的LogAgent;LogAgent的创建由用户自行定义,例如加入一个SA日志框架,那么就需要实现一个SALogAgent,再调用SALogAgent,最后设置日志的默认路由,这样LoggerAdapter便创建成功了。
S12、创建LoggerAdapter时传入日志层级的LogType,并根据LogType类型的LoggerAdapter调用LogAgent进行日志框架层级及日志配置的获取;
在Slf4j中需要通过LogFactory#getLogger方法传入LogType对应的名称进行获取。
其中,LoggerType对应的是不同的日志层级,例如,创建3个接口分别对应不同层级的日志输出。通过在每个接口中创建Logger logger=LoggerFactory.get(LoggerType.XXX)的形式进行日志层级配置,在此之后,用户只需要实现该接口,日志便可打印至对应的文件下。
用户通过调用LoggerAdaperFactory.updateRoutes的方法进行LoggerAdapter的配置。传入默认使用的日志框架是通过枚举LogRoute和定制的特殊路由的键值对,如service层使用slf4j,而Dal层则使用其他框架。
S13、获取不同日志层级的LoggerAdapter,通过接口操作LoggerAdapter进行日志输出;
S21、工厂模式下创建LoggerAdapter,并建立LoggerAdapterFactory,且LoggerAdapterFactory中存放有LoggerAdapter和日志层级的映射。
其中,LoggerAdapterFactory通过传入不同层级的名称(如:Service,Dal等),通过名称查询是否存在该LoggerAdapter,如果不存在则通过LoggerAdapter的创建方法,传入日志名称,创建一个新的LoggerAdapter。
S22、判断每个日志层级中相对应的LoggerAdapter是否存在;若否,则再次创建LoggerAdapter并存入Map中返回。
S23、LoggerAdaperFactory通过updateRoutes更新自身的LOGGER_HOLDERS和LOGGER_ROUTES属性,并存放用户指定的LoggerAdaper和Router。
其中,LOGGER_HOLDERS为字典数据,里面存放了logName->LogerAdapter的关系;
LOGGER_ROUTES同样为字典数据,里面存放logName->LogerRouter的关系;
Router是一个枚举,里面存放了使用的框架和框架的索引,在后续使用过程中,通过索引使用不同的LoggerAgent来实现不同日志框架的调度。
本实施例所示的日志分层方法核心是分层,其不关心用户使用的日志框架是什么(日志框架局限于基于slf4j的框架),由于不同的框架它们的配置不同,所以用户在使用的过程中配置须由用户自身配置。在配置完成后,实现接口即可分层打印日志。
在此应当说明的是,适配器模式的创建并不是用来实现日志分层,而是不同日志框架间的耦合性,日志的分层具体是框架决定不同的日志头到某个文件。用户通过日志适配工厂传入日志头名称,日志适配工厂并获取日志适配器,传入日志头,日志适配器通过Map缓存查询是否存在此agent,如果不存在重新创建一个并且放到日志工厂中,创建过程通过调用对应的日志框架传入日志头,日志框架对日志头进行解析,判断此日志传入哪个文件中,以进行日志打印。
图3为本发明第二实施例中日志分层方法初始化配置的流程图,图4为本发明第二实施例中日志分层方法运行的流程图,请结合图3、4,本实施例所示的日志分层方法是这样初始化设置的:通过LoggerAdaperFactory的updateRoutes方法设置默认和定制化框架的路由,不同层级的LogerHolder调用LoggerAdaperFactory中的getLogger方法,并传入LogType,获取LogType是否定制框架路由,当LogType未定制框架路由,则使用默认的框架,然后调用对应框架的实现传入LogType中的name生成LogAgent对象,并放入到LoggerAdaper中,此后便可以使用LoggerAdaper进行日志的输出。
图5为本发明第三实施例中日志分层系统的结构框图,如图5所示,本实施例总体根据设计模式-适配器模式进行设计。
适配器模式,将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。例如,各国使用的电压各不相同,有110V和220V等,但是我们的笔记本却可以直接使用。原因是电源适配器把电源转换成我们所需要的电压。在本申请中,因为需要对不同的日志框架进行支持,定义了适配器模式方便我们统一使用。下面对适配器的各种主要组件进行说明。
LogAgent是日志头的抽象接口,该类就是日志实际功能的抽象,也就是上文中的电压,所以logAgent里面定义了基础的功能,例如日志的info级别日志输出,debug级别日志输出等等。同时也依托于java的多态性,父对象可以根据当前赋值给它的子对象的特性以不同的方式运作,我们可以通过logagent操作实际的实现方法。
Slf4jAgent就是LogAgent的实现类,也就是前文所说的110V和220V实际的形式。假设以后出现了A日志框架,我们也只需要定义一个ALogAgent实现LogAgent,使用Java多态的性质通过操作LogAgent对象来根据当前赋值给他的ALogAgent特性方式运作。
LogRoute是Log的一个路由组件,也是Java的一个枚举类,其中定义了Slf4j枚举和他的序号(该序号在后面LoggerAdapter中作为他的身份标识且需从0开始以1为步长进行递增),如果用户需要对日志进行扩展,可以增加LogRoute的枚举,分配一个身份序号。
LoggerAdapter作为日志的适配器,他需要的功能是用户对只需要操作LoggerAdapter对象,就可以接入不同的LogAgent实现。LoggerAdapter中定义了一个LogAgent的数组,和一个默认的LogRoute路由。在创建LoggerAdapter的时候,会根据LogRoute中枚举的数量来定义LogAgent数组的大小,并且通过传入的LogRoute确定使用的实际LogAgent。例如:LogRoute中定义了2个枚举A(0)和B(1)(字母标识实际框架名字,数字表示序号),创建LoggerAdapter会创建一个大小为2的LogAgent数组,创建两个LogAgent的A对象和B对象并且根据序号决定他们在数组中的位置,再由默认的LogRoute中的序号决定每次使用的过程中实际的使用对象,但是这些操作对用户使用来说是隐藏的。
现在为止我们实现了通过操作LoggerAdapter可以操作不同的日志框架,接下来我们要解决的是使用LoggerAdapter实现不同级别的输出。由于我们实际的日志框架的输出是由框架决定,对我们来说是不可控的,同上文中的我们通过电源适配器,但是我们不能控制220V或者110V到底如何工作一样,这样我们就需要针对不同的框架进行不同的配置,接下来我们会以Slf4j的具体日志实现框架LogBack框架进行讲解。
本实施例所示的日志分层系统包括:
定义模块,用于在多个日志组件中分别抽象出agent;
其中,agent为一种概念,在软件工程中没有实体特征,日志的Agent里面定义了基础的功能,例如日志的info级别日志输出,debug级别日志输出等等,同时也依托于java的多态性,父对象可以根据当前赋值给它的子对象的特性以不同的方式运作;
获取模块,工厂对象获取日志组件中抽象得到的agent;
其中,工厂对象即工厂模式下的操作主体,工厂对象可以为多个;
存储模块,agent通过日志头获取对应的储存位置;
其中,在工厂对象获取到日志组件中的agent时,agent通过agent的日志头将其储存在相应的位置;
打印模块,打印接口分别适配不同的agent,并通过agent进行日志打印;
其中,该打印接口通过适配不同层级日志相对应的agent,即实现了日志的分层,通过agent进行日志打印,即实现了日志的分层输出,以便于后期取证工作的顺利进行。
在具体实施例时,多个日志组件中分别抽象出agent,每个agent通过日志头名称进行储存,不同层级的agent分别对应设有打印接口,通过打印接口连接不同的agent即可对应打印不同层级的日志,以最终实现日志的分层输出。
在具体实施时,定义模块用于定义各日志层级,每层日志层级对应设置打印接口,打印接口内存放有LoggerAdapter;
其中LoggerAdapter为日志的适配器,用于将一个类的接口转换成客户希望的另一个接口;例如,各国使用的电压各不相同,有110V和220V等,但是笔记本电脑却可以通用,这是因为笔记本电脑的电源适配器能够将电源转换成我们所需要的电压。在本实施例所示的日志分层方法中,因为需要对不同的日志框架进行支持,首先定义了适配器模式以便于统一使用。
其中,LoggerAdapter的创建方法需要传入两个参数,日志的日志头名称和日志的默认路由,然后在创建过程中会遍历LogRoute的枚举,创建对应的LogAgent;LogAgent的创建由用户自行定义,例如加入一个SA日志框架,那么就需要实现一个SALogAgent,再调用SALogAgent,最后设置日志的默认路由,这样LoggerAdapter便创建成功了。
创建LoggerAdapter时传入日志层级的LogType,并根据LogType类型的LoggerAdapter调用LogAgent进行日志框架层级及日志配置的获取;在Slf4j中需要通过LogFactory#getLogger方法传入LogType对应的名称进行获取。
其中,LoggerType对应的是不同的日志层级,例如,创建3个接口分别对应不同层级的日志输出。通过在每个接口中创建Logger logger=LoggerFactory.get(LoggerType.XXX)的形式进行日志层级配置,在此之后,用户只需要实现该接口,日志便可打印至对应的文件下。
用户通过调用LoggerAdaperFactory.updateRoutes的方法进行LoggerAdapter的配置。传入默认使用的日志框架是通过枚举LogRoute和定制的特殊路由的键值对,如service层使用slf4j,而Dal层则使用其他框架。
获取不同日志层级的LoggerAdapter,通过接口操作LoggerAdapter进行日志输出;
工厂模式下创建LoggerAdapter,并建立LoggerAdapterFactory,且LoggerAdapterFactory中存放有LoggerAdapter和日志层级的映射。
其中,LoggerAdapterFactory通过传入不同层级的名称(如:Service,Dal等),通过名称查询是否存在该LoggerAdapter,如果不存在则通过LoggerAdapter的创建方法,传入日志名称,创建一个新的LoggerAdapter。
判断每个日志层级中相对应的LoggerAdapter是否存在;
若否,则再次创建LoggerAdapter并存入Map中返回。
LoggerAdaperFactory通过updateRoutes更新自身的LOGGER_HOLDERS和LOGGER_ROUTES属性,并存放用户指定的LoggerAdaper和Router。
其中,LOGGER_HOLDERS为字典数据,里面存放了logName->LogerAdapter的关系;LOGGER_ROUTES同样为字典数据,里面存放logName->LogerRouter的关系;Router是一个枚举,里面存放了使用的框架和框架的索引,在后续使用过程中,通过索引使用不同的LoggerAgent来实现不同日志框架的调度。
应当说明的是,适配器模式的创建并不是用来实现日志分层,而是不同日志框架间的耦合性,日志的分层具体是框架决定不同的日志头到某个文件。用户通过日志适配工厂传入日志头名称,日志适配工厂并获取日志适配器,传入日志头,日志适配器通过Map缓存查询是否存在此agent,如果不存在重新创建一个并且放到日志工厂中,创建过程通过调用对应的日志框架传入日志头,日志框架对日志头进行解析,判断此日志传入哪个文件中,以进行日志打印。
本实施例所示的日志分层方法是这样初始化设置的:通过LoggerAdaperFactory的updateRoutes方法设置默认和定制化框架的路由,不同层级的LogerHolder调用LoggerAdaperFactory中的getLogger方法,并传入LogType,获取LogType是否定制框架路由,当LogType未定制框架路由,则使用默认的框架,然后调用对应框架的实现传入LogType中的name生成LogAgent对象,并放入到LoggerAdaper中,此后便可以使用LoggerAdaper进行日志的输出。
本发明的第四实施例提供了一种可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现第一或第二实施例当中所示slf4j的日志分层方法的步骤。
本发明的第五实施例提供了一种计算机设备,结合图1描述的本申请实施例日志分层方法可以由计算机设备来实现。图6为根据本申请实施例的计算机设备的硬件结构示意图。
计算机设备可以包括处理器51以及存储有计算机程序指令的存储器52。
具体地,上述处理器51可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit,简称为ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
其中,存储器52可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器52可包括硬盘驱动器(Hard Disk Drive,简称为HDD)、软盘驱动器、固态驱动器(SolidState Drive,简称为SSD)、闪存、光盘、磁光盘、磁带或通用串行总线(Universal SerialBus,简称为USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器52可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器52可在数据处理装置的内部或外部。在特定实施例中,存储器52是非易失性(Non-Volatile)存储器。在特定实施例中,存储器52包括只读存储器(Read-Only Memory,简称为ROM)和随机存取存储器(RandomAccess Memory,简称为RAM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(Programmable Read-Only Memory,简称为PROM)、可擦除PROM(Erasable ProgrammableRead-Only Memory,简称为EPROM)、电可擦除PROM(Electrically Erasable ProgrammableRead-Only Memory,简称为EEPROM)、电可改写ROM(Electrically Alterable Read-OnlyMemory,简称为EAROM)或闪存(FLASH)或者两个或更多个以上这些的组合。在合适的情况下,该RAM可以是静态随机存取存储器(Static Random-Access Memory,简称为SRAM)或动态随机存取存储器(Dynamic Random Access Memory,简称为DRAM),其中,DRAM可以是快速页模式动态随机存取存储器(Fast Page Mode Dynamic Random Access Memory,简称为FPMDRAM)、扩展数据输出动态随机存取存储器(Extended Date Out Dynamic RandomAccess Memory,简称为EDODRAM)、同步动态随机存取内存(Synchronous Dynamic Random-Access Memory,简称SDRAM)等。
存储器52可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器52所执行的可能的计算机程序指令。
处理器51通过读取并执行存储器52中存储的计算机程序指令,以实现上述实施例中的任意一种方法。
在其中一些实施例中,计算机设备还可包括通信接口53和总线50。其中,如图4所示,处理器51、存储器52、通信接口53通过总线50连接并完成相互间的通信。
通信接口53用于实现本申请实施例中各模块、装置、单元和/或设备之间的通信。通信接口53还可以实现与其他部件例如:外接设备、图像/数据采集设备、数据库、外部存储以及图像/数据处理工作站等之间进行数据通信。
总线50包括硬件、软件或两者,将计算机设备的部件彼此耦接在一起。总线50包括但不限于以下至少之一:数据总线(Data Bus)、地址总线(Address Bus)、控制总线(Control Bus)、扩展总线(Expansion Bus)、局部总线(Local Bus)。举例来说而非限制,总线50可包括图形加速接口(Accelerated Graphics Port,简称为AGP)或其他图形总线、增强工业标准架构(Extended Industry Standard Architecture,简称为EISA)总线、前端总线(Front Side Bus,简称为FSB)、超传输(Hyper Transport,简称为HT)互连、工业标准架构(Industry Standard Architecture,简称为ISA)总线、无线带宽(InfiniBand)互连、低引脚数(Low Pin Count,简称为LPC)总线、存储器总线、微信道架构(Micro ChannelArchitecture,简称为MCA)总线、外围组件互连(Peripheral Component Interconnect,简称为PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(Serial AdvancedTechnology Attachment,简称为SATA)总线、视频电子标准协会局部(Video ElectronicsStandards Association Local Bus,简称为VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线50可包括一个或多个总线。尽管本申请实施例描述和示出了特定的总线,但本申请考虑任何合适的总线或互连。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体与详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形与改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (7)
1.一种日志分层方法,其特征在于,所述方法包括以下步骤:
在多个日志组件中分别抽象出agent;
工厂对象获取所述日志组件中抽象得到的所述agent;
所述agent通过日志头获取对应的储存位置;
打印接口分别适配不同层级日志对应的所述agent,并通过所述agent进行日志打印,其中,所述agent通过日志头名称进行存储,所述打印接口内存放有对应不同日志层级的LoggerAdapter;
所述方法还包括:
定义各日志层级,每层所述日志层级对应设置所述打印接口,所述打印接口内存放有LoggerAdapter;
工厂模式下创建LoggerAdapter,并建立LoggerAdapterFactory,且所述LoggerAdapterFactory中存放有所述LoggerAdapter和所述日志层级的映射;
创建所述LoggerAdapter时传入所述日志层级的LogType,并根据所述LogType类型的所述LoggerAdapter调用LogAgent进行日志框架层级及日志配置的获取。
2.根据权利要求1所述的日志分层方法,其特征在于,定义各日志层级,每层所述日志层级具有相对应的接口,所述接口内存放有LoggerAdapter的步骤之后还包括:
获取不同所述日志层级的所述LoggerAdapter,通过所述接口操作所述LoggerAdapter进行日志输出。
3.根据权利要求1所述的日志分层方法,其特征在于,所述方法还包括:
判断每个所述日志层级中相对应的所述LoggerAdapter是否存在;
若否,则再次创建所述LoggerAdapter并存入Map中返回。
4.根据权利要求1所述的日志分层方法,其特征在于,所述方法还包括:
所述LoggerAdaperFactory通过updateRoutes更新自身的LOGGER_HOLDERS和LOGGER_ROUTES属性,并存放用户指定的LoggerAdaper和Router。
5.一种日志分层系统,其特征在于,包括:
定义模块,用于在多个日志组件中分别抽象出agent,其中,定义各日志层级,每层所述日志层级对应设置打印接口,所述打印接口内存放有LoggerAdapter,工厂模式下创建LoggerAdapter,并建立LoggerAdapterFactory,且所述LoggerAdapterFactory中存放有所述LoggerAdapter和所述日志层级的映射,创建所述LoggerAdapter时传入所述日志层级的LogType,并根据所述LogType类型的所述LoggerAdapter调用LogAgent进行日志框架层级及日志配置的获取;
获取模块,工厂对象获取所述日志组件中抽象得到的所述agent;
存储模块,所述agent通过日志头获取对应的储存位置;
打印模块,打印接口分别适配不同层级日志对应的所述agent,并通过所述agent进行日志打印,其中,所述agent通过日志头名称进行存储,所述打印接口内存放有对应不同日志层级的LoggerAdapter。
6.一种可读存储介质,其上存储有计算机指令,其特征在于:该指令被处理器执行时实现权利要求1-4任一项所述方法的步骤。
7.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-4任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011492776.1A CN112596993B (zh) | 2020-12-17 | 2020-12-17 | 日志分层方法、系统、可读存储介质及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011492776.1A CN112596993B (zh) | 2020-12-17 | 2020-12-17 | 日志分层方法、系统、可读存储介质及计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112596993A CN112596993A (zh) | 2021-04-02 |
CN112596993B true CN112596993B (zh) | 2023-06-20 |
Family
ID=75196639
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011492776.1A Active CN112596993B (zh) | 2020-12-17 | 2020-12-17 | 日志分层方法、系统、可读存储介质及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112596993B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109450689A (zh) * | 2018-11-19 | 2019-03-08 | 郑州云海信息技术有限公司 | 一种日志打印方法、装置、存储介质和计算机设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111352691B (zh) * | 2018-12-21 | 2023-11-03 | 北京神州泰岳软件股份有限公司 | 一种日志采集方法和系统 |
-
2020
- 2020-12-17 CN CN202011492776.1A patent/CN112596993B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109450689A (zh) * | 2018-11-19 | 2019-03-08 | 郑州云海信息技术有限公司 | 一种日志打印方法、装置、存储介质和计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112596993A (zh) | 2021-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2018006789A1 (zh) | 一种参数校验方法和装置、以及网管服务器和计算机存储介质 | |
US20080120521A1 (en) | Automated Testing and Control of Networked Devices | |
JP4991124B2 (ja) | 分散データモデル | |
CN104169897B (zh) | Pci高速地址解码的方法 | |
CN111683066B (zh) | 异构系统集成方法、装置、计算机设备和存储介质 | |
US20130227349A1 (en) | Cloud brokering method and apparatus in heterogeneous cloud environment | |
CN103853650A (zh) | 一种模糊测试的测试用例生成方法及装置 | |
CN109408247A (zh) | 交互数据处理方法及装置 | |
CN109768970A (zh) | 一种基于可配置的通用协议生成方法 | |
US11496368B2 (en) | Dynamically identifying criticality of services and data sources | |
CN108388519A (zh) | 基于SpringBoot服务的Mock测试方法 | |
CN106325988A (zh) | 任务调度方法及装置 | |
CN112667415B (zh) | 数据调用方法、装置、可读存储介质及电子设备 | |
CN108933787A (zh) | 报文生成方法及装置 | |
CN103647775B (zh) | 一种在网页中进行登录的方法和装置 | |
CN116681013A (zh) | 网络芯片的仿真验证方法、平台、装置、设备及介质 | |
CN115543479A (zh) | 一种适用于动态参数的接口调用解析方法及装置 | |
CN103326930A (zh) | 开放平台接口自动巡检方法和系统 | |
CN112596993B (zh) | 日志分层方法、系统、可读存储介质及计算机设备 | |
CN113778897A (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
US7331002B2 (en) | Navigating breakpoints in a program in a debugging mode | |
KR20220060429A (ko) | 원격지의 네트워크 스위치에 대한 로그 수집 시스템 및 이의 빅데이터 구축 방법 | |
US11947942B2 (en) | Application artifact registration | |
CN103457957B (zh) | 一种具有自适应功能的网络渗透测试系统及方法 | |
CN114143079B (zh) | 包过滤策略的验证装置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |