一种日志级别动态修改方法、装置、设备及存储介质与流程

allin2024-10-18  39



1.本发明涉及软件日志记录技术领域,更具体地说,涉及一种日志级别动态修改方法、装置、设备及存储介质。


背景技术:

2.java程序在开发过程中或开发完成后,如果出现异常情况或者存在性能瓶颈,开发人员需要有详细的程序日志记录,用于缺陷定位或者性能瓶颈分析。目前通常是利用日志框架本身提供的机制进行日志过滤的设置等操作,但是这种方式无法在不同的日志框架下兼容。


技术实现要素:

3.本发明的目的是提供一种日志级别动态修改方法、装置、设备及存储介质,能够实现日志过滤灵活动态设置的同时,在不同的日志框架下兼容。
4.为了实现上述目的,本发明提供如下技术方案:
5.一种日志级别动态修改方法,包括:
6.在java程序的日志输出时,判断是否需要进行相应的日志过滤增强;
7.如果判断的结果为需要进行相应的日志过滤增强,则动态修改日志过滤器中的过滤日志级别,控制所述日志过滤器按照修改后的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录;
8.如果判断的结果为不需要进行相应的日志过滤增强,则直接控制所述日志过滤器按照已有的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录。
9.优选的,动态修改日志过滤器中的过滤日志级别,包括:
10.调用预先设置的日志过滤代理,并控制所述日志过滤代理动态修改所述日志过滤器中的过滤日志级别。
11.优选的,在日志输出前,还包括:
12.在java程序的启动过程中,拦截所述java程序的程序运行包中class文件的加载过程,判断所述class文件是否实现所述日志过滤器的接口,如果是,则在所述class文件的日志过滤器接口实现中增加所述日志过滤代理,如果否,则确定无需修改所述class文件,并在所述class文件的日志过滤器接口实现中增加所述日志过滤代理或确定无需修改所述class文件后,继续加载所述class文件以完成所述java程序的启动。
13.优选的,拦截所述java程序的程序运行包中class文件的加载过程包括:
14.通过字节码插桩技术,拦截所述java程序的程序运行包中class文件的加载过程。
15.一种日志级别动态修改装置,包括:
16.判断模块,用于:在java程序的日志输出时,判断是否需要进行相应的日志过滤增强;
17.第一执行模块,用于:如果判断的结果为需要进行相应的日志过滤增强,则动态修改日志过滤器中的过滤日志级别,控制所述日志过滤器按照修改后的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录;
18.第二执行模块,用于:如果判断的结果为不需要进行相应的日志过滤增强,则直接控制所述日志过滤器按照已有的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录。
19.优选的,所述第一执行模块包括:
20.修改单元,用于:调用预先设置的日志过滤代理,并控制所述日志过滤代理动态修改所述日志过滤器中的过滤日志级别。
21.优选的,还包括:
22.设置模块,用于:在日志输出前,在java程序的启动过程中,拦截所述java程序的程序运行包中class文件的加载过程,判断所述class文件是否实现所述日志过滤器的接口,如果是,则在所述class文件的日志过滤器接口实现中增加所述日志过滤代理,如果否,则确定无需修改所述class文件,并在所述class文件的日志过滤器接口实现中增加所述日志过滤代理或确定无需修改所述class文件后,继续加载所述class文件以完成所述java程序的启动。
23.优选的,所述设置模块包括:
24.拦截单元,用于:通过字节码插桩技术,拦截所述java程序的程序运行包中class文件的加载过程。
25.一种日志级别动态修改设备,包括:
26.存储器,用于存储计算机程序;
27.处理器,用于执行所述计算机程序时实现如上任一项所述日志级别动态修改方法的步骤。
28.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述日志级别动态修改方法的步骤。
29.本发明提供了一种日志级别动态修改方法、装置、设备及存储介质,该方法包括:在java程序的日志输出时,判断是否需要进行相应的日志过滤增强;如果判断的结果为需要进行相应的日志过滤增强,则动态修改日志过滤器中的过滤日志级别,控制所述日志过滤器按照修改后的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录;如果判断的结果为不需要进行相应的日志过滤增强,则直接控制所述日志过滤器按照已有的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录。本技术在java程序的日志输出时,自动判断是否需要进行相应的日志过滤增强,在判断结果为是时自动实现日志过滤器中过滤日志级别的动态修改,进而控制日志过滤器基于修改后的过滤日志级别实现日志过滤及记录,在判断结果为否时则直接控制日志过滤器基于其中已有的过滤日志级别实现日志过滤及记录。可见,本技术能够在java程序的运行过程中,基于需求实现对进行日志过滤时所基于的过滤日志级别进行动态修改,从而实现日志过滤灵活动态设置的同时,能够在不同的日志框架下兼容。
附图说明
30.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
31.图1为本发明实施例提供的一种日志级别动态修改方法的流程图;
32.图2为本发明实施例提供的一种日志级别动态修改装置的结构示意图。
具体实施方式
33.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
34.请参阅图1,其示出了本发明实施例提供的一种日志级别动态修改方法的流程图,具体可以包括:
35.s11:在java程序的日志输出时,判断是否需要进行相应的日志过滤增强。
36.本发明实施例的日志级别动态修改方法可以基于java字节码增强技术实现,字节码是程序的一种低级表示,可以运行于java虚拟机上,将程序抽象成字节码可以保证java程序在各种设备上的运行。在计算机领域中日志可以记录发生在运行中的操作系统或其他软件中的事件,也可以记录在网络聊天软件的用户之间发送的消息,本技术实施例中的日志为记录java程序运行过程中各项事件的文件。
37.在java程序开发时,开发人员会预先在java程序的关键节点进行日志事件埋点,进而在java程序运行时,日志框架会在日志事件埋点处依据该java程序预定的过滤日志级别对日志进行过滤,过滤后保留的日志的优先级高于或者等于该java程序预定的过滤日志级别对应优先级,并对保留的日志进行日志记录。在常规模式下日志记录仅仅只有开发时日志事件埋点的一部分,为了便于工程师进行故障定位,可能需要调整过滤日志级别,本发明实施例则是通过java字节码增强技术,在java程序的日志需要输出时,无需重启java程序,则可以直接对过滤日志级别进行动态修改。其中,日志记录指保存日志,如将日志写入单个存放日志的文件;过滤日志级别指日志的重要程度或者说优先级,常见过滤日志级别有info、warn、debug等;日志框架指记录日志的具体实现,java领域存在多种日志框架,如log4j 1、log4j 2、commons logging、slf4j、logback、jul等;日志过滤器指日志框架为了过滤日志事件使用的筛选机制。
38.在java程序的日志输出时,可以先判断是否需要进行相应的日志过滤增强,也即是否需要对过滤日志级别进行动态修改;如果判断的结果为是,则基于外界用户的设置动态修改日志过滤器中的过滤日志级别,以使得日志过滤器能够基于修改后的过滤日志级别对输出的日志进行过滤,并对过滤后保留的日志进行记录,如果判断的结果为否,则说明无需修改日志过滤器中的过滤日志级别,因此可以使得日志过滤器直接按照其中已有的过滤日志级别对输出的日志进行过滤,并对过滤后保留的日志进行记录。其中,判断是否需要进行相应的日志过滤增强可以是判断外界用户是否有进行过滤日志级别的设置,如果有,则
说明需要进行相应的日志过滤增强,否则,说明不需要进行相应的日志过滤增强;当然也可以根据实际需要进行其他设定,均在本发明的保护范围之内。
39.s12:如果判断的结果为需要进行相应的日志过滤增强,则动态修改日志过滤器中的过滤日志级别,控制日志过滤器按照修改后的过滤日志级别对输出的日志进行过滤,并对日志过滤器过滤后保留的日志进行记录。
40.s13:如果判断的结果为不需要进行相应的日志过滤增强,则直接控制日志过滤器按照已有的过滤日志级别对输出的日志进行过滤,并对日志过滤器过滤后保留的日志进行记录。
41.本技术在java程序的日志输出时,自动判断是否需要进行相应的日志过滤增强,在判断结果为是时自动实现日志过滤器中过滤日志级别的动态修改,进而控制日志过滤器基于修改后的过滤日志级别实现日志过滤及记录,在判断结果为否时则直接控制日志过滤器基于其中已有的过滤日志级别实现日志过滤及记录。可见,本技术能够在java程序的运行过程中,基于需求实现对进行日志过滤时所基于的过滤日志级别进行动态修改,从而实现日志过滤灵活动态设置的同时,能够在不同的日志框架下兼容。
42.本发明实施例提供的一种日志级别动态修改方法,动态修改日志过滤器中的过滤日志级别,可以包括:
43.调用预先设置的日志过滤代理,并控制日志过滤代理动态修改日志过滤器中的过滤日志级别。
44.需要说明的是,动态修改日志过滤器中过滤日志级别的步骤可以是由预先设置的日志过滤代理作为执行主体实现的;具体来说,本技术实施例中可以预先设置有日志过滤代理,判断是否需要进行日志过滤增强也即为判断日志事件是否需要进行日志过滤代理,如果判断结果为是,则调用日志过滤代理或者说进行日志过滤代理,从而由日志过滤代理实现日志过滤器中过滤日志级别的动态修改,如果判断的结果为否,则进入原有的日志过滤器进行日志过滤,最终形成日志记录。可见,本技术能够通过调用预设的日志过滤代理,高效自动的实现对日志过滤器中过滤日志级别的动态修改。
45.本发明实施例提供的一种日志级别动态修改方法,在日志输出之前,还可以包括:在java程序的启动过程中,拦截java程序的程序运行包中class文件的加载过程,判断class文件是否实现日志过滤器的接口,如果是,则在class文件的日志过滤器接口实现中增加日志过滤代理,如果否,则确定无需修改class文件,并在class文件的日志过滤器接口实现中增加日志过滤代理或确定无需修改class文件后,继续加载class文件以完成java程序的启动;
46.拦截java程序的程序运行包中class文件的加载过程,包括:通过字节码插桩技术,拦截java程序的程序运行包中class文件的加载过程。
47.在java程序的启动过程中,jvm(java virtual machine,java虚拟机)虚拟机会加载java程序的程序运行包中的class文件,本技术实施例可以通过字节码插桩技术拦截class文件的加载过程,判断当前加载的class文件是否实现了日志框架的过滤器接口(日志框架的过滤器接口即为日志过滤器接口,当前加载的class文件是否实现了日志框架的过滤器接口也即当前加载的class文件是否继承了日志框架的filter接口),如果当前加载的class文件实现了日志框架的过滤器接口,则对当前加载的class文件进行过滤方法的增
强,也即将日志过滤代理加入至当前加载的class文件的日志过滤器接口实现中,以在后续基于该日志过滤代理实现过滤日志级别动态修改,如果当前加载的class文件没有实现日志框架的过滤器接口,则无需对class文件进行任何操作。可见,本技术能够在java程序的启动过程中,自动高效的实现对日志过滤代理的增加,便于后期过滤日志级别的动态修改。
48.在一种具体实现方式中,本发明实施例提供的日志级别动态修改方法可以包含两部分,分别为java程序启动流程及过滤日志级别动态修改流程。在java程序启动流程中,java程序启动过程中,通过字节码插桩技术拦截class文件的加载过程,如果当前加载的class文件实现了日志框架的过滤器接口,则对当前加载的class文件进行过滤方法的增强(即在class文件的日志过滤器接口实现中增加日志过滤代理),否则无需对当前加载的class文件进行任何操作;在过滤日志级别动态修改流程中,日志输出时,判断日志事件是否需要进行日志过滤代理,如果需要则进行日志过滤代理,动态进行过滤日志级别修改,否则进入原来的日志过滤器进行日志过滤,最终形成日志记录。
49.本发明主要解决java程序运行过程中,日志记录只能记录程序启动时已经配置的过滤日志级别及该过滤日志级别以上的日志事件、动态修改过滤日志级别的实现在不同的日志框架下存在不兼容的问题,通过字节码编程在程序启动时对日志框架的日志过滤器进行增强,可对过滤日志级别动态修改,而不对软件进行重启;整个过程中对程序的代码零侵入,不需要对程序进行二次开发。具体来说,本发明通过字节码增强技术匹配各种日志框架的日志过滤器,实现日志记录的过滤日志级别动态修改,可适配不同的日志框架,不需要对框架进行额外的接口实现;程序源代码不需要进行修改,零侵入,对应用程序的性能影响很小;工程师可通过动态修改程序过滤日志级别,动态修改日志记录的过滤日志级别代理可在线装卸,不需要进行程序重启,快速进行缺陷定位、解决问题。
50.本发明实施例还提供了一种日志级别动态修改装置,如图2所示,具体可以包括:
51.判断模块11,用于:在java程序的日志输出时,判断是否需要进行相应的日志过滤增强;
52.第一执行模块12,用于:如果判断的结果为需要进行相应的日志过滤增强,则动态修改日志过滤器中的过滤日志级别,控制日志过滤器按照修改后的过滤日志级别对输出的日志进行过滤,并对日志过滤器过滤后保留的日志进行记录;
53.第二执行模块13,用于:如果判断的结果为不需要进行相应的日志过滤增强,则直接控制日志过滤器按照已有的过滤日志级别对输出的日志进行过滤,并对日志过滤器过滤后保留的日志进行记录。
54.本发明实施例提供的一种日志级别动态修改装置,第一执行模块具体可以包括:
55.修改单元,用于:调用预先设置的日志过滤代理,并控制日志过滤代理动态修改日志过滤器中的过滤日志级别。
56.本发明实施例提供的一种日志级别动态修改装置,还可以包括:
57.设置模块,用于:在日志输出前,在java程序的启动过程中,拦截java程序的程序运行包中class文件的加载过程,判断class文件是否实现日志过滤器的接口,如果是,则在class文件的日志过滤器接口实现中增加日志过滤代理,如果否,则确定无需修改class文件,并在class文件的日志过滤器接口实现中增加日志过滤代理或确定无需修改class文件后,继续加载class文件以完成java程序的启动。
58.本发明实施例提供的一种日志级别动态修改装置,设置模块可以包括:
59.拦截单元,用于:通过字节码插桩技术,拦截java程序的程序运行包中class文件的加载过程。
60.本发明实施例还提供了一种日志级别动态修改设备,可以包括:
61.存储器,用于存储计算机程序;
62.处理器,用于执行计算机程序时实现如上任一项日志级别动态修改方法的步骤。
63.本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可以实现如上任一项日志级别动态修改方法的步骤。
64.需要说明的是,本发明实施例提供的一种日志级别动态修改装置、设备及存储介质中相关部分的说明请参见本发明实施例提供的一种日志级别动态修改方法中对应部分的详细说明,在此不再赘述。另外,本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
65.对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

技术特征:
1.一种日志级别动态修改方法,其特征在于,包括:在java程序的日志输出时,判断是否需要进行相应的日志过滤增强;如果判断的结果为需要进行相应的日志过滤增强,则动态修改日志过滤器中的过滤日志级别,控制所述日志过滤器按照修改后的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录;如果判断的结果为不需要进行相应的日志过滤增强,则直接控制所述日志过滤器按照已有的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录。2.根据权利要求1所述的方法,其特征在于,动态修改日志过滤器中的过滤日志级别,包括:调用预先设置的日志过滤代理,并控制所述日志过滤代理动态修改所述日志过滤器中的过滤日志级别。3.根据权利要求2所述的方法,其特征在于,在日志输出前,还包括:在java程序的启动过程中,拦截所述java程序的程序运行包中class文件的加载过程,判断所述class文件是否实现所述日志过滤器的接口,如果是,则在所述class文件的日志过滤器接口实现中增加所述日志过滤代理,如果否,则确定无需修改所述class文件,并在所述class文件的日志过滤器接口实现中增加所述日志过滤代理或确定无需修改所述class文件后,继续加载所述class文件以完成所述java程序的启动。4.根据权利要求3所述的方法,其特征在于,拦截所述java程序的程序运行包中class文件的加载过程,包括:通过字节码插桩技术,拦截所述java程序的程序运行包中class文件的加载过程。5.一种日志级别动态修改装置,其特征在于,包括:判断模块,用于:在java程序的日志输出时,判断是否需要进行相应的日志过滤增强;第一执行模块,用于:如果判断的结果为需要进行相应的日志过滤增强,则动态修改日志过滤器中的过滤日志级别,控制所述日志过滤器按照修改后的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录;第二执行模块,用于:如果判断的结果为不需要进行相应的日志过滤增强,则直接控制所述日志过滤器按照已有的过滤日志级别对输出的日志进行过滤,并对所述日志过滤器过滤后保留的日志进行记录。6.根据权利要求5所述的装置,其特征在于,所述第一执行模块包括:修改单元,用于:调用预先设置的日志过滤代理,并控制所述日志过滤代理动态修改所述日志过滤器中的过滤日志级别。7.根据权利要求6所述的装置,其特征在于,还包括:设置模块,用于:在日志输出前,在java程序的启动过程中,拦截所述java程序的程序运行包中class文件的加载过程,判断所述class文件是否实现所述日志过滤器的接口,如果是,则在所述class文件的日志过滤器接口实现中增加所述日志过滤代理,如果否,则确定无需修改所述class文件,并在所述class文件的日志过滤器接口实现中增加所述日志过滤代理或确定无需修改所述class文件后,继续加载所述class文件以完成所述java程序的启动。
8.根据权利要求7所述的装置,其特征在于,所述设置模块包括:拦截单元,用于:通过字节码插桩技术,拦截所述java程序的程序运行包中class文件的加载过程。9.一种日志级别动态修改设备,其特征在于,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如权利要求1至4任一项所述日志级别动态修改方法的步骤。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述日志级别动态修改方法的步骤。

技术总结
本发明公开了一种日志级别动态修改方法、装置、设备及存储介质,该方法包括:在Java程序的日志输出时,判断是否需要进行相应的日志过滤增强;如果判断的结果为是,则动态修改日志过滤器中的过滤日志级别,控制日志过滤器按照修改后的过滤日志级别对输出的日志进行过滤,并对日志过滤器过滤后保留的日志进行记录;如果判断的结果为否,则直接控制日志过滤器按照已有的过滤日志级别对输出的日志进行过滤,并对日志过滤器过滤后保留的日志进行记录。可见,本申请能够在Java程序的运行过程中,基于需求实现对进行日志过滤时所基于的过滤日志级别进行动态修改,从而实现日志过滤灵活动态设置的同时,能够在不同的日志框架下兼容。能够在不同的日志框架下兼容。能够在不同的日志框架下兼容。


技术研发人员:顾首成 郭遵义 梁艺 姜远胜 何礼仁
受保护的技术使用者:成都星云智联科技有限公司
技术研发日:2022.04.18
技术公布日:2022/7/4
转载请注明原文地址: https://www.8miu.com/read-17145.html

最新回复(0)