CN107329880A - 一种java环境中动态获取日志实例的方法及系统 - Google Patents
一种java环境中动态获取日志实例的方法及系统 Download PDFInfo
- Publication number
- CN107329880A CN107329880A CN201710386662.0A CN201710386662A CN107329880A CN 107329880 A CN107329880 A CN 107329880A CN 201710386662 A CN201710386662 A CN 201710386662A CN 107329880 A CN107329880 A CN 107329880A
- Authority
- CN
- China
- Prior art keywords
- log
- instance
- class
- current
- frame
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 98
- 230000003068 static effect Effects 0.000 claims description 20
- 238000005516 engineering process Methods 0.000 claims description 8
- 238000004458 analytical method Methods 0.000 claims description 7
- 238000004806 packaging method and process Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 13
- 235000019580 granularity Nutrition 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 239000011230 binding agent Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 238000013024 troubleshooting Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种java环境中动态获取日志实例的方法及系统,所述方法包括:将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。本发明具有如下有益效果:1、能够无侵入的动态获取java环境中目标程序的日志实例;2、支持多种主流日志框架的动态获取。
Description
技术领域
本发明涉及软件工程技术领域,更具体地,涉及一种java环境中动态获取日志实例的方法及系统。
背景技术
系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。系统日志包括系统日志、应用程序日志和安全日志。
当线上项目出现问题时,程序员必须能够快速高效的找到问题的根源并解决。最有效的方式是通过分析系统日志。如果系统日志全面,会为程序员排查解决线上问题带来绝大的帮助,要想保证系统日志全面,就必须打印出所有的系统或业务日志。
然而,现有技术中的日志打印技术会带来另一个问题,那就是日志量的暴涨,过多的日志除了能够帮助我们解决问题外,同时会直接造成系统性能下降,极端情况下,甚至导致系统宕机。现有技术通过将日志动态获取的逻辑放到一个通用的项目中,其它项目如果要接入该功能,必须将这个通用的项目作为自己的父项目,这就在一定程度上给开发者造成很多不便。
发明内容
本发明为克服上述问题或者至少部分地解决上述问题,提供一种java环境中动态获取日志实例的方法及系统。
根据本发明的一个方面,提供一种java环境中动态获取日志实例的方法,包括:
步骤1,将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;
步骤2,基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
进一步,所述步骤2前还包括:
步骤21,在目标应用的启动脚本中动态添加所述日志实例获取接口类;
步骤22,不再动态获取日志实例时,从启动脚本中删除所述日志实例获取接口类。
进一步,所述步骤21进一步包括:
通过在目标应用中添加MANIFEST.MF文件,实例化所述日志实例获取接口类;将所述日志实例获取接口类打包为jar包,将所述目标应用和所述jar包相关联。
进一步,所述步骤2中目标应用当前日志框架类型通过以下步骤获取:基于获取的当前绑定的静态日志实例绑定类,获取当前日志框架类型。
进一步,所述获取当前日志框架中的日志实例的步骤进一步包括:
基于当前日志框架类型的不同,分别获取粗粒度日志实例和/或细粒度日志实例。
进一步,所述基于获取的当前绑定的静态日志实例绑定类,获取当前日志框架类型的步骤进一步包括:
调用获取的当前绑定的静态日志实例绑定类中获取日志实例工厂方法,基于所述日志实例工厂方法获取日志实例工厂接口实现类的类名,基于所述日志实例工厂接口实现类的类名获取当前日志框架类型。
进一步,所述步骤2中当前绑定的静态日志实例绑定类通过以下步骤获取:
利用简单日志门面获取前类路径下所有org.slf4j.impl.StaticLoggerBinder类,依赖Java的类加载顺序获取当前绑定的静态日志实例绑定类。
进一步,所述基于当前日志框架类型的不同,分别获取粗粒度日志实例和/或细粒度日志实例的步骤进一步包括:
若当前日志框架为Log4j2日志框架,利用当前日志框架的接口获取当前日志框架配置文件中的粗粒度日志实例;若当前日志框架为Log4j或Logback日志框架,通过XML解析技术解析配置日志XML文件,获取粗粒度日志实例;
利用当前日志框架中的日志实例获取方法,获取当前日志框架中的细粒度日志实例。
根据本发明另一个方面,提供一种java环境中动态获取日志实例的系统,包括:
定义模块,用于将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;
获取模块,用于基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
根据本发明另一个方面,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上述方案中任一所述的方法。
本申请提出一种java环境中动态获取日志实例的方法及系统,本发明所述方案具有如下有益效果:1、能够无侵入的动态获取java环境中目标程序的日志实例;2、支持多种主流日志框架的动态获取。
附图说明
图1为根据本发明实施例一种java环境中动态获取日志实例的方法的整体流程示意图;
图2为根据本发明实施例一种java环境中动态获取日志实例的系统的整体框架示意图;
图3为根据本发明实施例一种java环境中动态获取日志实例的方法的设备的结构框架示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图1,本发明一个具体实施例中,示出一种java环境中动态获取日志实例的方法整体流程示意图。总体上,包括:步骤1,将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;步骤2,基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述步骤2前还包括:步骤21,在目标应用的启动脚本中动态添加所述日志实例获取接口类;步骤22,不再动态获取日志实例时,从启动脚本中删除所述日志实例获取接口类。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述步骤21进一步包括:
通过在目标应用中添加MANIFEST.MF文件,实例化所述日志实例获取接口类;将所述日志实例获取接口类打包为jar包,将所述目标应用和所述jar包相关联。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述步骤21进一步包括:
通过在目标应用中添加MANIFEST.MF文件,实例化所述日志实例获取接口类;将所述日志实例获取接口类打包为jar包,通过在目标应用启动脚本中添加-javaagent参数,实现所述目标应用和所述jar包的关联。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述步骤2中目标应用当前日志框架类型通过以下步骤获取:基于获取的当前绑定的静态日志实例绑定类,获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述基于获取的当前绑定的静态日志实例绑定类,获取当前日志框架类型的步骤进一步包括:
调用获取的当前绑定的静态日志实例绑定类中获取日志实例工厂方法,基于所述日志实例工厂方法获取日志实例工厂接口实现类的类名,基于所述日志实例工厂接口实现类的类名获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述步骤2中当前绑定的静态日志实例绑定类通过以下步骤获取:
利用简单日志门面获取前类路径下所有org.slf4j.impl.StaticLoggerBinder类,依赖Java的类加载顺序获取当前绑定的静态日志实例绑定类。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述步骤2中获取当前日志框架类型的步骤进一步包括:基于获取的当前绑定的静态日志实例绑定类,获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述获取当前日志框架中的日志实例的步骤进一步包括:
基于当前日志框架类型的不同,分别获取粗粒度日志实例和/或细粒度日志实例。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述基于所述绑定的StaticLoggerBinder类获取当前日志框架类型的步骤进一步包括:
调用所述绑定的StaticLoggerBinder类中getLoggerFactoryClassStr方法,获取org.slf4j.impl.ILoggerFactory接口实现类的类名,基于所述类名获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述步骤2中获取当前日志框架类型的步骤进一步包括:
利用简单日志门面获取前classpath下所有org.slf4j.impl.StaticLoggerBinder类,依赖Java的类加载顺序获取绑定的StaticLoggerBinder类,基于所述绑定的StaticLoggerBinder类获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述基于当前日志框架类型的不同,分别获取粗粒度日志实例和/或细粒度日志实例的步骤进一步包括:
若当前日志框架为Log4j2日志框架,利用当前日志框架的接口获取当前日志框架配置文件中的粗粒度日志实例;若当前日志框架为Log4j或Logback日志框架,通过XML解析技术解析配置日志XML文件,获取粗粒度日志实例;
利用当前日志框架中的日志实例获取方法,获取当前日志框架中的细粒度日志实例。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的方法,所述方法具体包括以下步骤。
首先,实现LoggerRegistry接口。
LoggerRegistry接口定义了对Logger的获取相关的操作,该接口统一了不同日志实现框架的获取操作,该接口的实现类处理对具体日志框架的Logger获取细节,如Log4j2LoggerRegistry提供对Log4j2日志框架中的Logger获取的具体实现。LoggerRegistry接口定义如下所示。
其中loadLoggers方法表示从日志框架获取Logger实例,并将Logger实例保存起来,其中参数ILoggerFactory是slf4j(日志门面框架)中的接口,某些日志框架如Logback会依赖ILoggerFactory实例获取Logback中的Logger实例。currentLoggerType方法获取应用使用的日志框架类型,通过获取应用使用的日志框架类型,我们可以知道保存的Logger实例的类型。listLoggers方法提供了对LoggerRegistry获取到的Logger实例的查询功能,该方法返回给调用者细粒度的Logger实例。listConfigLoggers方法提供对LoggerRegistry获取到的xml配置文件中的Logger实例的查询功能,该方法返回给调用者粗粒度的Logger实例。(细粒度的Logger实例:即开发者为开发的每个类定义的与该类类名相同名称的Logger实例;粗粒度的Logger实例:即开发者在所使用的日志框架的配置文件中定义的Logger实例)
其次,实现细粒度Logger获取。
不同的日志框架都包含了Logger的管理功能,只是在实现上会有细微的差别。细粒度的Logger获取就是依赖日志框架包含的Logger管理功能,调用日志框架提供的Logger管理接口然后将获取到的Logger实例保存起来。获取Log4j2日志框架中的Logger实例如下。
Log4j2框架的LoggerContext接口中定义了对Log4j2管理的Logger实例的获取操作。registerLogger方法用于将从LoggerContext中获取的所有的Logger实例保存起来。我们提供了LoggerRegistry抽象类AbstractLoggerRegistry,该类使用HashMap保存Logger实例,HashMap的key(键)是Logger实例的名字,值是Logger实例。registerLogger方法就是由该类提供。
实现粗粒度Logger获取。
细粒度的Logger获取方式会获取开发者为每个开发的类定义的与该类类名相同的Logger实例,该方式获取到的Logger实例通常数量是比较多的。我们的开发人员希望看到他们在日志框架的配置文件中配置的Logger。因此需要一种粗粒度的Logger获取方式。目前Log4j2日志框架提供相应的接口获取配置文件中配置的Logger,而对于Log4j和Logback这两个日志框架则不支持该功能,为此,我们(放在应用中在文件里面配置日志文件XML,我们通过解析文件获取到logger实例),采用xml解析技术完成对这两个日志框架对应的配置文件中的Logger的获取功能。获取Log4j2对应的配置文件中的Logger实例如下:
其中Configuration就是Log4j2描述lo4j2.xml配置文件的类,该类提供了获取配置文件中Logger实例的方法。对于获取Logback和Log4j框架对应的配置文件中的Logger则采用的是解析xml配置文件的Logger标签,这两个框架描述Logger的标签稍微有所差别,但解析方式一样,通过使用pull解析技术可以很方便的获取配置文件中的Logger标签,以及相关的Logger属性。
最后、将动态获取Logger组件设置为应用启动时运行(使得本具体实施例方案有无侵入性)。
1)加载LoggerRegistry实现类
本专利描述的日志获取方案依赖slf4j(日志门面框架)。在应用初始化时,slf4j会绑定具体的日志框架,具体是会查找当前的classpath下的所有的org.slf4j.impl.StaticLoggerBinder类,依赖Java的类加载顺序决定绑定哪个StaticLoggerBinder类,绑定哪个StaticLoggerBinder的过程也就是slf4j确定应用使用哪个日志框架的过程。Logback、Log4j、Log4j2日志框架都提供了StaticLoggerBinder类的具体实现。通过调用StaticLoggerBinder类的getLoggerFactoryClassStr方法,我们能够获取到org.slf4j.impl.ILoggerFactory接口实现类的类名。然后根据这个类名判断slf4j绑定的具体的日志框架。然后我们根据不同的日志框架动态加载LoggerRegistry的具体实现类来完成对不同日志框架中的Logger实例获取操作。
对于Log4j,Logbacck,Log4j2框架,getLoggerFactoryClassStr返回的内容如下:
org.slf4j.impl.Log4jLoggerFactory
org.apache.logging.slf4j.Log4jLoggerFactory
ch.qos.logback.classic.util.ContextSelectorStaticBinder
2)在日志动态获取应用中添加MANIFEST.MF文件,并将其manifest属性中的Premain-Class项设置为相应的启动类的名称,该启动类需要提供public static voidpremain(String args,Instrumentation inst)这样签名的方法,该方法的具体执行逻辑根据slf4j绑定的具体的日志框架来实例化对应的LoggerRegistry实现类。
在需要添加日志动态获取功能的应用的启动脚本中添加-javaagent参数,举例来说,可通过以下代码实现:
java-javaagent:${APP_HOME}/dynamic_get_logger.jar
-jar app.jar
其中,${APP_HOME}是日志动态获取组件打包后的jar包所在的目录,app表示需要添加日志动态获取功能的应用。
本具体实施例中所记载技术方案具有如下有益效果。
1、无侵入性
对应用的无侵入性是Logger动态获取组件的最重要的目标和需求,我们原有的技术方案是将日志动态获取的逻辑放到一个通用的项目中,其它项目如果要接入该功能,必须将这个通用的项目作为自己的父项目。这就在一定程度上给开发者造成很多不便。而本专利中介绍的Logger动态获取组件只需要在应用的启动脚本中添加-javaagent:${APP_HOME}/dynamic_get_logger.jar这句话就可以为应用引入Logger动态获取功能。当我们的应用不需要动态获取Logger实例这种功能的时候,只需要将这句话从启动脚本中删除就可以实现。这就使得我们的Logger动态获取组件对应用具有无侵入性。
2、支持主流日志框架
该解决方案适配了目前主流的日志框架,从而使得Logger动态获取组件使用的范围更加的广泛,支持扩展且扩展对宿主应用无感知,并且考虑到了扩展性,能够方便的提供对其他日志框架的支持。
3、提供粗细两种粒度获取Logger
支持在粗细两种粒度上获取应用中的Logger实例,使得我们开发的日志级别动态调整组件既能修改与某个类类名相同的Logger实例的日志级别,又能够以粗粒度的方式批量修改Logger实例的日志级别。
如图2,在本发明另一个具体实施例中,示出一种java环境中动态获取日志实例的系统总体框架示意图。整体上,包括:定义模块A1,将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;获取模块A2,获取目标应用当前日志框架类型,基于当前日志框架类型调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,还包括动态添加模块,用于步骤21,在目标应用的启动脚本中动态添加所述日志实例获取接口类;步骤22,不再动态获取日志实例时,从启动脚本中删除所述日志实例获取接口类。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,还包括:实例化模块,用于通过在目标应用中添加MANIFEST.MF文件,实例化所述日志实例获取接口类;将所述日志实例获取接口类打包为jar包,将所述目标应用和所述jar包相关联。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于:基于获取的当前绑定的静态日志实例绑定类,获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于:基于当前日志框架类型的不同,分别获取粗粒度日志实例和/或细粒度日志实例。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于:调用获取的当前绑定的静态日志实例绑定类中获取日志实例工厂方法,基于所述日志实例工厂方法获取日志实例工厂接口实现类的类名,基于所述日志实例工厂接口实现类的类名获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于:利用简单日志门面获取前类路径下所有org.slf4j.impl.StaticLoggerBinder类,依赖Java的类加载顺序获取当前绑定的静态日志实例绑定类。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于:若当前日志框架为Log4j2日志框架,利用当前日志框架的接口获取当前日志框架配置文件中的粗粒度日志实例;若当前日志框架为Log4j或Logback日志框架,通过XML解析技术解析配置日志XML文件,获取粗粒度日志实例;
利用当前日志框架中的日志实例获取方法,获取当前日志框架中的细粒度日志实例。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于:利用简单日志门面获取前classpath下所有org.slf4j.impl.StaticLoggerBinder类,依赖Java的类加载顺序获取绑定的StaticLoggerBinder类,基于所述绑定的StaticLoggerBinder类获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于:调用所述绑定的StaticLoggerBinder类中getLoggerFactoryClassStr方法,获取org.slf4j.impl.ILoggerFactory接口实现类的类名,基于所述类名获取当前日志框架类型。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于若当前日志框架为Log4j2日志框架,利用当前日志框架的接口获取当前日志框架配置文件中的粗粒度日志实例;若当前日志框架为Log4j或Logback日志框架,通过XML解析技术解析配置日志XML文件,获取粗粒度日志实例。
在本发明另一个具体实施例中,一种java环境中动态获取日志实例的系统,所述获取模块还用于利用当前日志框架中的日志实例获取方法,获取当前日志框架中的细粒度日志实例。
图3示出本申请实施例的java环境中动态获取日志实例的方法的设备的结构框图。
参照图3,所述java环境中动态获取日志实例的方法的设备,包括:处理器(processor)301、存储器(memory)302和总线303;
其中,
所述处理器301和存储器302通过所述总线303完成相互间的通信;
所述处理器301用于调用所述存储器302中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:步骤1,将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;步骤2,基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:步骤1,将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;步骤2,基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:步骤1,将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;步骤2,基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的java环境中动态获取日志实例的方法的设备等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种java环境中动态获取日志实例的方法,其特征在于,包括:
步骤1,将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;
步骤2,基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
2.如权利要求1所述的方法,其特征在于,所述步骤2前还包括:
步骤21,在目标应用的启动脚本中动态添加所述日志实例获取接口类;
步骤22,不再动态获取日志实例时,从启动脚本中删除所述日志实例获取接口类。
3.如权利要求1所述的方法,其特征在于,所述步骤21进一步包括:
通过在目标应用中添加MANIFEST.MF文件,实例化所述日志实例获取接口类;将所述日志实例获取接口类打包为jar包,将所述目标应用和所述jar包相关联。
4.如权利要求1所述的方法,其特征在于,所述步骤2中目标应用当前日志框架类型通过以下步骤获取:基于获取的当前绑定的静态日志实例绑定类,获取当前日志框架类型。
5.如权利要求1所述的方法,其特征在于,所述获取当前日志框架中的日志实例的步骤进一步包括:
基于当前日志框架类型的不同,分别获取粗粒度日志实例和/或细粒度日志实例。
6.如权利要求4所述的方法,其特征在于,所述基于获取的当前绑定的静态日志实例绑定类,获取当前日志框架类型的步骤进一步包括:
调用获取的当前绑定的静态日志实例绑定类中获取日志实例工厂方法,基于所述日志实例工厂方法获取日志实例工厂接口实现类的类名,基于所述日志实例工厂接口实现类的类名获取当前日志框架类型。
7.如权利要求2所述的方法,其特征在于,所述步骤2中当前绑定的静态日志实例绑定类通过以下步骤获取:
利用简单日志门面获取前类路径下所有org.slf4j.impl.StaticLoggerBinder类,依赖Java的类加载顺序获取当前绑定的静态日志实例绑定类。
8.如权利要求4所述的方法,其特征在于,所述基于当前日志框架类型的不同,分别获取粗粒度日志实例和/或细粒度日志实例的步骤进一步包括:
若当前日志框架为Log4j2日志框架,利用当前日志框架的接口获取当前日志框架配置文件中的粗粒度日志实例;若当前日志框架为Log4j或Logback日志框架,通过XML解析技术解析配置日志XML文件,获取粗粒度日志实例;
利用当前日志框架中的日志实例获取方法,获取当前日志框架中的细粒度日志实例。
9.一种java环境中动态获取日志实例的系统,其特征在于,包括:
定义模块,用于将不同类型日志框架中日志实例获取方法定义在日志实例获取接口类中;
获取模块,用于基于获取的目标应用当前日志框架类型,调用所述日志实例获取接口类中对应的日志实例获取方法,获取当前日志框架中的日志实例。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至8任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710386662.0A CN107329880A (zh) | 2017-05-26 | 2017-05-26 | 一种java环境中动态获取日志实例的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710386662.0A CN107329880A (zh) | 2017-05-26 | 2017-05-26 | 一种java环境中动态获取日志实例的方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107329880A true CN107329880A (zh) | 2017-11-07 |
Family
ID=60193784
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710386662.0A Pending CN107329880A (zh) | 2017-05-26 | 2017-05-26 | 一种java环境中动态获取日志实例的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107329880A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108600035A (zh) * | 2018-07-21 | 2018-09-28 | 杭州安恒信息技术股份有限公司 | 一种非侵入式web应用监控与日志查询方法 |
CN113835975A (zh) * | 2021-08-20 | 2021-12-24 | 武汉众邦银行股份有限公司 | 一种基于配置化最小粒度日志输出方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105260293A (zh) * | 2015-11-06 | 2016-01-20 | Tcl集团股份有限公司 | 日志信息的输出方法、装置及终端设备 |
CN105278996A (zh) * | 2015-11-03 | 2016-01-27 | 亚信科技(南京)有限公司 | 一种日志采集方法、装置及日志服务系统 |
CN105450449A (zh) * | 2015-12-01 | 2016-03-30 | 百度在线网络技术(北京)有限公司 | 文件操作方法和装置 |
CN106528423A (zh) * | 2016-11-10 | 2017-03-22 | 北京百家互联科技有限公司 | 动态日志记录方法及装置 |
-
2017
- 2017-05-26 CN CN201710386662.0A patent/CN107329880A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105278996A (zh) * | 2015-11-03 | 2016-01-27 | 亚信科技(南京)有限公司 | 一种日志采集方法、装置及日志服务系统 |
CN105260293A (zh) * | 2015-11-06 | 2016-01-20 | Tcl集团股份有限公司 | 日志信息的输出方法、装置及终端设备 |
CN105450449A (zh) * | 2015-12-01 | 2016-03-30 | 百度在线网络技术(北京)有限公司 | 文件操作方法和装置 |
CN106528423A (zh) * | 2016-11-10 | 2017-03-22 | 北京百家互联科技有限公司 | 动态日志记录方法及装置 |
Non-Patent Citations (1)
Title |
---|
长安 等: "日志级别动态调整——小工具解决大问题", 《HTTPS://TECH.MEITUAN.COM/2017/02/17/CHANGE-LOG-LEVEL.HTML》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108600035A (zh) * | 2018-07-21 | 2018-09-28 | 杭州安恒信息技术股份有限公司 | 一种非侵入式web应用监控与日志查询方法 |
CN113835975A (zh) * | 2021-08-20 | 2021-12-24 | 武汉众邦银行股份有限公司 | 一种基于配置化最小粒度日志输出方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11750444B2 (en) | Implementation of compliance settings by a mobile device for compliance with a configuration scenario | |
US9495186B1 (en) | Automatic discovery of a javascript API | |
US11842222B2 (en) | Using scripts to bootstrap applications with metadata from a template | |
US8302092B2 (en) | Extensible data driven deployment system | |
US11762763B2 (en) | Orchestration for automated performance testing | |
US8543994B2 (en) | Developing java server components without restarting the application server | |
US20150040145A1 (en) | Inter-application communication on mobile platforms | |
EP2791850B1 (en) | Identifying application resources through implicit application models | |
CN112068902B (zh) | 一种插件调用方法、装置、电子设备及存储介质 | |
CN105718313A (zh) | 应用操作方法和装置 | |
US9971563B2 (en) | Systems and methods for low interference logging and diagnostics | |
US11741002B2 (en) | Test automation systems and methods using logical identifiers | |
US9535666B2 (en) | Dynamic agent delivery | |
US20060190813A1 (en) | Mobile device having extensible sofware for presenting server-side applications, software and methods | |
CN112667305A (zh) | 页面展示方法及装置 | |
CN109522021B (zh) | 参数回调处理方法、装置、电子设备及存储介质 | |
CN112685020A (zh) | 动态创建服务接口的方法、装置、电子设备及存储介质 | |
US10073689B2 (en) | Managing application lifecycles within a federation of distributed software applications | |
CN107329880A (zh) | 一种java环境中动态获取日志实例的方法及系统 | |
CN103377194A (zh) | 加速网页访问的方法、装置和浏览器 | |
US20160170739A1 (en) | Alter application behaviour during runtime | |
Jaramillo et al. | Virtualization techniques for mobile systems | |
CN108228266A (zh) | 一种Android插件框架下不同插件间启动Fragment组件的方法和装置 | |
US11036618B2 (en) | Tenant code management in multi-tenant systems | |
CN115113898A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171107 |