日志打印方法和装置、以及日志打印系统与流程

文档序号:12785994阅读:676来源:国知局
日志打印方法和装置、以及日志打印系统与流程

本申请涉及服务端业务打印技术领域,具体涉及一种日志打印方法。本申请同时涉及一种日志打印装置及系统。



背景技术:

在服务端业务系统中,经常会划分出不同的层次来进行代码的隔离和抽象。一个简单的后端业务系统可分为服务层、领域层和数据层,这样一个前台请求会经过后端业务系统三层处理,传统的方式会在每一层的每一个实现类的代码中手动指定一个日志打印logger,这样打印日志不够灵活、代码重复,并且不能将一个业务请求链路的日志串写在一个文件中,从而导致排查问题和进行业务监控的时候耗时费力,浪费很多资源。

或者,业务系统日志不按照业务划分打印,是通过aop或者各个层次写死logger方式按照层次划分打印的。一次业务请求最终打印的日志分散在多个文件中,排查问题查看日志需要grep多个文件才能查看完整链路,十分不方便。另外由于多个业务日志打印在同一个文件中,配置业务的监控对监控系统的性能压力也较大。

因此,现有技术不能很好的实现一次业务请求链路上的所有日志都打印到一个文件中的效果,即使通过一定的方法实现上述效果,但是也需要在业务系统中额外增加代码,给程序开发人员的业务代码的开发造成严重的不便。



技术实现要素:

本申请提供一种日志打印方法,以解决现有技术中存在的上述问题。

本申请另外提供一种日志打印装置和系统。

本申请提供一种日志打印方法,应用于业务系统中,所述业务系统包括多个层,所述方法包括:

接收业务请求;

根据所述业务请求,确定对应的层以及对应的日志打印组件;

将所述业务请求在对应的层中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中。

可选的,所述将所述业务请求在对应的层中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中,包括:将所述业务请求在对应的层中所产生的日志信息,采用相同的日志打印组件打印到同一日志文件中。

可选的,在所述根据所述业务请求,确定对应的层以及对应的日志打印组件之后,执行以下操作:

存储所述日志打印组件以及该日志打印组件与对应的业务请求之间的对应关系;

所述将所述业务请求在对应的层中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中,包括:

在业务系统的不同层中,根据所述业务请求的类型确定该业务请求所对应的日志打印组件;

获取不同层中的业务请求所产生的需要记录的日志信息;

采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中。

可选的,所述业务系统的多个层中包括请求入口层和若干个被调用层;

所述请求入口层是所述业务请求的进入业务系统的起始层,并可调用所述被调用层;所述若干个被调用层至少部分层与层之间具有调用顺序,按照调用顺序依次被上一层所调用;

所述根据所述业务请求,确定对应的层以及对应的日志打印组件,是在所述请求入口层进行的。

可选的,所述在业务系统的不同层中,根据所述业务请求的类型确定该业务请求所对应的日志打印组件包括:

将业务请求的请求参数作为接口参数,根据所述调用顺序依次调用不同层的业务系统中的层;

不同层分别根据所述业务请求的类型确定与该业务请求所对应的日志打印组件。

可选的,在所述采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中之后,执行以下操作:

按照调用顺序的反顺序依次返回业务请求的结果;

被请求入口层调用的被调用层将业务请求的结果返回至请求入口层之后,所述请求入口层将业务请求的结果返回给请求方。

可选的,所述采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中,包括:根据所述调用顺序,确定打印到日志文件中的日志信息的顺序。

可选的,所述业务请求在对应的层中所产生的日志信息中的日志信息采用以下方式获取:

所述业务系统中不同层根据接收到的业务请求的请求参数进行相应层的业务调用,每层可获取与请求参数对应的返回结果;

将所述请求参数与返回结果作为所述日志信息。

可选的,所述业务请求在对应的层中所产生的日志信息中的日志信息还包括额外业务请求信息,所述额外业务请求信息是指请求方发送的额外业务请求所对应的指定的所需要打印的信息;

所述将所述业务请求在对应的层中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中包括:

在包含有所述额外业务请求的层,确定该额外业务请求对应的日志打印组件;

获取所述额外请求业务对应的额外请求参数及返回的所需要打印的指定信息;

采用确定的所述日志打印组件将获取的额外请求参数及返回的指定信息打印到与该额外业务请求所对应的日志文件中。

可选的,所述根据所述业务请求,确定对应的层以及对应的日志打印组件包括:

获取业务请求所对应的类型;

基于所述业务请求所对应的类型,采用预设方式设置该业务请求的接口方法以使得业务请求与相应的日志打印组件之间具有对应关系。

可选的,所述预设方式包括:采用注解的方式;或者,采用xml配置方式。

可选的,所述采用注解的方式,是在业务请求的接口方法上增加相应的日志打印组件的注解,以使业务请求与相应的日志打印组件之间具有对应关系。

可选的,采用预先设置的分层拦截方式为不同层设置日志拦截方式;

在所述接收业务请求之后,执行以下操作:

不同层均采用所述日志拦截方式分别拦截相应层的业务请求,以执行相应业务请求的日志打印任务。

本申请还提供一种日志打印装置,该装置包括:

业务请求接收单元,用于接收业务请求;

日志打印组件确定单元,用于根据所述业务请求,确定对应的层以及对应的日志打印组件;

日志信息打印单元,用于将所述业务请求在对应的层中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中。

可选的,该装置还包括:

存储单元,用于在所述根据所述业务请求,确定对应的层以及对应的日志打印组件之后,存储所述日志打印组件以及该日志打印组件与对应的业务请求之间的对应关系;

所述日志信息打印单元包括:

日志打印组件获取子单元,用于在业务系统的不同层中,根据所述业务请求的类型确定该业务请求所对应的日志打印组件;

日志信息获取子单元,用于获取不同层中的业务请求所产生的需要记录的日志信息;

打印子单元,用于采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中。

可选的,所述业务系统的多个层中包括请求入口层和若干个被调用层;

所述请求入口层是所述业务请求的进入业务系统的起始层,并可调用所述被调用层;所述若干个被调用层至少部分层与层之间具有调用顺序,按照调用顺序依次被上一层所调用;

所述日志打印组件确定单元是在所述请求入口层进行的。

可选的,所述日志打印组件获取子单元包括:

调用子单元,用于将业务请求的请求参数作为接口参数,根据所述调用顺序依次调用不同层的业务系统中的层;

获取子单元,用于不同层分别根据所述业务请求的类型确定与该业务请求所对应的日志打印组件。

可选的,该装置还包括:

业务请求结果返回单元,用于在所述采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中之后,按照调用顺序的反顺序依次返回业务请求的结果;

结果返回请求方单元,用于被请求入口层调用的被调用层将业务请求的结果返回至请求入口层之后,所述请求入口层将业务请求的结果返回给请求方。

可选的,所述业务请求在对应的层中所产生的日志信息中的日志信息还包括额外业务请求信息,所述额外业务请求信息是指请求方发送的额外业务请求所对应的指定的所需要打印的信息;

所述日志信息打印单元包括:

额外请求获取子单元,用于在包含有所述额外业务请求的层,确定该额外业务请求对应的日志打印组件;

指定信息获取子单元,用于获取所述额外请求业务对应的额外请求参数及返回的所需要打印的指定信息;

指定信息打印子单元,用于采用确定的所述日志打印组件将获取的额外请求参数及返回的指定信息打印到与该额外业务请求所对应的日志文件中。

可选的,所述日志打印组件确定单元包括:

类型获取子单元,用于获取业务请求所对应的类型;

打印子单元,用于基于所述业务请求所对应的类型,采用预设方式设置该业务请求的接口方法以使得业务请求与相应的日志打印组件之间具有对应关系。

可选的,该装置还包括:

日志拦截方式设置单元,用于采用预先设置的分层拦截方式为每层设置日志拦截方式;

日志打印任务执行单元,用于在所述接收业务请求之后,不同层均采用所述日志拦截方式分别拦截相应层的业务请求,以执行相应业务请求的日志打印任务。

本申请另外还提供一种日志打印系统,该系统包括:

自动拦截器模块,用于拦截业务请求,并采用预设方式将日志拦截器配置到业务系统的各个层的接口上;

业务信息配置模块,用于接收自动拦截器模块拦截的业务请求,并基于业务请求,为业务请求配置以确定与该业务请求所对应的日志打印组件;

日志打印工具模块,用于在自动拦截器模块拦截到业务请求之后,采用业务信息配置模块配置的日志打印组件在业务系统中打印日志。

可选的,所述业务信息配置模块将配置好的日志打印组件与业务请求的对应关系存储在用于维护该对应关系的线程上;

相应的,所述日志打印工具模块从所述线程上获取日志打印组件与业务请求的对应关系,并采用该日志打印组件将相应的业务请求的操作所产生的日志信息打印到相应的日志文件中。

与现有技术相比,本申请具有以下优点:

本申请提供一种日志打印方法,应用于业务系统中,所述业务系统包括多个层,该方法包括:接收业务请求;根据所述业务请求,确定对应的层以及对应的日志打印组件;将所述业务请求在对应的层中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中。

该方法是建立一个简单、灵活、对业务代码无侵入的日志框架的方法,无需业务系统增加代码,当不同业务的请求过来,该方法建立的日志框架会自动将每一层处理方法的参数及返回值打印在不同业务对应的日志文件中,同时业务代码中的日志打印也可以直接打印到该业务对应的日志文件中,可以保证一次业务请求链路上的所有日志都能够打印到一个文件中。

附图说明

图1是本申请第一实施例提供的日志打印方法的流程图。

图2是本申请第一实施例提供的日志打印组件打印日志过程的流程图

图3是本申请第一实施例提供的服务层接受业务请求时的时序的状态图。

图4是本申请第一实施例提供的领域层接受服务层业务调用的时序的状态图。

图5是本申请第一实施例提供的使用日志打印组件打印日志的时序的状态图。

图6是本申请第二实施例提供的日志打印装置的结构示意图。

图7是本申请第三实施例提供的日志打印系统的结构示意图。

图8是本申请第四实施例提供的电子设备的结构示意图。

具体实施方式

本申请第一实施例提供一种日志打印方法,该方法应用于业务系统中,所述业务系统包括多个层,具体的,通过该方法可以在业务系统中构建用于打印日志的日志框架,该日志框架可以预先为业务请求配置相应的日志打印工具,从而使得多层构架的业务系统的各层的日志信息均可以打印到一个日志文件中,相应的,针对一个业务请求,该业务请求链路的日志将串写在一个日志文件中,因此,可以在通过日志文件进行排查问题或进行业务监控时节省耗费时间和精力。另一方面,在保证上述一个业务请求链路的日志打印至一个文件的同时,该方法不需要在业务系统中增加代码,以方便程序开发人员专注于业务代码的开发,无需另外考虑与日志相关的各种问题。

以下通过具体的实施例对该方法进行说明和介绍。图1是本申请第一实施例提供的日志打印方法的流程图。请参照图1,该方法包括以下步骤S101-步骤S103。

步骤S101,接收业务请求。

在服务端的业务系统中,一般会划分出不同的层次来进行代码的隔离和抽象,因此,一个简单的后端业务系统可以由多个具有分层构架的多个分层构成,例如,该分层可以包括请求入口层和若干个被调用层,所述请求入口层是所述业务请求的进入所述业务系统的最上层,该最上层可以直接接收该业务请求该请求入口层也是进入该业务系统的起始层,并可调用所述被调用层;所述若干个被调用层至少部分层与层之间具有调用顺序,按照调用顺序,依次可以被上一层所调用。

常用的该分层构架可以包括服务层、领域层和数据层等,或者是表示层,业务层,数据层等,也可以包括通讯层、逻辑层、数据层等。总之,业务系统是可以通过包含多层的方式实现业务的完整执行,在业务系统的每一层中分别执行该层所需要执行的任务。其中,常用的业务系统可以包括服务层、领域层和数据层,通过该三个层可执行不同的业务请求。所述服务层可以设定为请求入口层,用于直接接收外部业务请求,另外,层与层之间采用调用的方式连接,则相应的,服务层可以调用领域层,而领域层可以调用数据层。上述调用关系即为该业务系统中各层之间的调用顺序。

由于服务层、领域层和数据层是业务系统常用的分层方式,本实施例将以该分层方式为例进行说明。业务请求方通过前端系统发出业务请求信号,相应的,该业务请求信息需要经过后端业务系统的上述三个层进行处理,并且针对一个业务请求,该业务请求在每个层均可以将该业务请求所需要的日志信息打印在相应的日志文件中。

通过上述介绍,说明在服务端的业务系统中,每一层都可能接收业务请求,而根据层与层之间的调用顺序,可以获知,所述服务层可以接收业务请求,并可以以该业务请求的请求参数作为传递参数继续调用所述领域层,同样的,所述领域层也可以根据传递参数调用所述数据层。

每执行一次业务请求,在相应的服务层、领域层和数据层均有相应的操作在执行,该操作所产生的信息即为后续需要打印的日志信息。

所述业务请求可以是请求方发起的在登陆界面上登陆的过程,或者在注册界面上进行注册的过程等,或者在付款界面上进行付款的过程等,该业务请求的具体类型可以有多种,只要是请求方发起的请求,均可以将该请求分为不同的类。

另外,为了保证该日志打印的任务被执行,需要设置开启该日志打印任务的方式,只有执行该开启操作之后,才会将接收的业务请求进行日志打印,而该开启操作可以通过多种方式实现,优选的,采用日志拦截器拦截业务请求的方式实现上述开启操作。

具体的,需要预先采用预设方式为不同层设置日志拦截方式。

由于每层中具体执行的业务请求所执行的操作是不同的,相应的,每层执行的操作所产生的日志信息也是不相同的,因此,需要以层为基准,分别获取不同的每层的日志信息,这样则每层均需要执行针对业务请求的日志打印任务,因此,在每层的入口位置,均需要设置相应的日志拦截器,以拦截调用该相应层的业务请求。

所述预先采用预设方式为每层设置日志拦截方式的步骤中的所述预设方式包括:面向切面方式,该面向切面方式可以是AOP(Aspect Oriented Programming),以下可以将AOP作为面向切面方式替代名词。具体的,所述AOP是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生的范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

此处,采用AOP方式可以将业务系统中各层进行隔离,以将日志拦截器设置到各个层次的入口位置的接口方法上。

相应的,在每层的接口方法上设置有日志拦截器,并且在所述接收业务请求之后,可以执行以下操作:

采用所述日志拦截方式拦截所述业务请求,执行相应业务请求的日志打印任务。

该步骤是通过日志拦截方式拦截每层的业务请求,拦截之后可以执行相应业务请求的日志打印任务,具体该日志打印任务是如何执行的,可通过后续步骤进行介绍和说明。

请继续参照图1,步骤S102,根据所述业务请求,确定对应的层以及对应的日志打印组件。

其中,该日志打印组件用于将日志信息打印在对应该日志打印组件的日志文件中。

该步骤是具体是根据业务请求的种类或类型,为不同类型的业务请求配置不同的日志打印组件的过程,上述步骤中简单的对所述业务请求进行了简单的说明和介绍。

例如,针对用户登陆这一请求,可以将用户登陆这一过程作为一个类,并且为该类的业务请求确定相应的日志打印组件,而日志打印组件是打印日志的一个工具,通过日志打印组件可以将需要打印的日志信息打印至相应的日志文件中,因此,日志打印组件是与日志文件对应的。

相应的,根据业务请求的类型,可以将相同类型的业务请求所产生的日志信息打印至相同的日志文件中,并且,每层中均可以执行日志打印的任务,且可以将每层中登陆这一请求所涉及的操作产生的日志信息打印至同一日志文件中,每一层的日志信息可以采用串写的方式打印在同一日志文件中。

具体的,所述基于所述业务请求的类型,为所述业务请求确定对应的日志打印组件步骤所采用的方式包括:获取业务请求的类型。

首先获取业务请求的类型,以使得可以根据业务请求的类型来确定相应的日志打印组件。

基于所述业务请求所对应的类型,采用预设方式设置该业务请求的接口方法以使得业务请求与相应的日志打印组件相对应。

所述预设方式包括:采用注解的方式;或者,采用xml配置方式。所述采用注解的方式,是在业务请求的接口方法上增加相应的日志打印组件的注解,以使业务请求的接口方法与对应的日志打印组件之间具有对应关系。

上述预设方式并是受限于上述两种方式,其他可以将接口方法与日志打印组件进行对应的方式均属于本申请保护的范围。

根据所述业务请求,确定对应的层以及对应的日志打印组件这一步骤一般是在请求入口层完成的,只有在最上层的请求入口层配置好相应的日志打印组件之后,才可能在后续步骤中采用该配置好的日志打印组件进行日志的打印任务。

另外,该基于所述业务请求的类型,为所述业务请求确定对应的日志打印组件步骤可以在封装的业务信息配置模块中完成,该业务信息配置模块的作用即是采用预设的方式将请求入口的业务接口方法和实际的日志文件对应起来。

具体的,所述根据所述业务请求,确定对应层以及对应的日志打印组件之后,可以执行以下操作:

存储所述日志打印组件以及该日志打印组件与对应的业务请求之间的对应关系。

该步骤是将日志打印组件以日志打印组件与相应的业务请求的对应关系存储起来的过程,由于后续步骤中还会应用到该日志打印组件,并且也涉及到日志打印组件与相应的业务请求之间的对应关系,所以,需要在此将上述信息进行存储,以供后续步骤进行上述信息的获取。

在本申请第一实施例中,针对将所述存储所述日志打印组件以及该日志打印组件与对应的业务请求之间的对应关系存储中,其中存储方式可以包括多种,其中优选的存储方式包括以下方式:

将所述日志打印组件以及该日志打印组件与对应的业务请求之间的对应关系存储在线程本地变量中。

所述线程本地变量可称为ThreadLocal,在该ThreadLocal中可以存储上述日志打印组件以及日志打印组件与相应类型的业务请求之间的对应关系。存储在所述ThreadLocal中之后,在业务系统的每个层次中,均可以从相应层次中的所述ThreadLocal中获取相应的日志打印组件,因此,针对相同的业务请求,每层中均可以从该ThreadLocal中读取与该业务请求相对应的日志打印组件,并采用该日志打印组件将每层中的日志信息可以打印至相同的日志文件中。

相应的,所述在分层构架的业务系统的所有层中,将所述业务请求所产生的需要记录的日志信息,采用与该业务请求相对应的日志打印组件打印到相应的日志文件中步骤,图2是本申请第一实施例提供的日志打印组件打印日志过程的流程图,请参照图2,该过程包括以下步骤S102-1至步骤S102-3:

步骤S102-1,在分层构架的业务系统的每一层中,根据所述业务请求的类型获取与该业务请求对应的日志打印组件。

由于上述步骤中已经将日志打印组件存储在所述线程本地变量中,相应的,所述在分层构架的业务系统的每一层中,根据所述业务请求的类型获取与该业务请求对应的日志打印组件,是每一层均从所述线程本地变量中获取所述业务请求所对应的日志打印组件。

另外,针对相同的业务请求,每层中均可以从该线程本地变量(ThreadLocal)中读取与该业务请求相对应的日志打印组件,并采用该日志打印组件将每层中的日志信息打印至相同的日志文件中。

具体的,所述在分层构架的业务系统的每一层中,根据所述业务请求的类型获取与该业务请求对应的日志打印组件步骤包括:

为所述请求入口层及若干个被调用层设置调用顺序。

所述请求入口层可以调用第一个被调用层,第一个被调用层可以调用第二个被调用层,依次类推,设置请求入口层及若干个被调用层之间的调用顺序。其中,所述请求入口层直接接收的是外部的请求方的调用。

具体的,所述业务系统的多个层中包括请求入口层和若干个被调用层;所述请求入口层是所述业务请求的进入业务系统的起始层,并可调用所述被调用层;所述若干个被调用层至少部分层与层之间具有调用顺序,按照调用顺序依次被上一层所调用。

其次,为所述请求入口层及若干个被调用层设置调用顺序之后,将业务请求的请求参数作为接口参数,根据所述调用顺序依次调用不同层的业务系统中的层。

每个层次中的入口位置设置有接口方法,将请求参数作为接口参数,通过每个层入口位置的接口方法进行参数的传递和调用,以连接所有层。

不同层分别根据所述业务请求的类型获取与该业务请求所对应的日志打印组件。在该步骤之后,执行以下操作:

按照调用顺序的反顺序依次返回业务请求的结果。被请求入口层调用的被调用层将业务请求的结果返回至请求入口层之后,所述请求入口层将业务请求的结果返回给请求方。

请继续参照图2,步骤S102-2,获取不同层中的业务请求所产生的需要记录的日志信息。

该步骤是获取每层中日志信息的过程,针对每一个业务请求,该业务请求在业务系统中的每一层执行的操作是不同的,相应的,每层中执行的操作所产生的信息称为日志信息,因此,根据每一层的不同操作,将会形成不同的日志信息。

具体的,例如,登陆这一请求,根据每层的作用不同,则每层所执行的操作也不同,例如,针对服务层、领域层和数据层,在服务层可能执行的是将用户登陆的用户名作为请求参数,判定系统中是否有该用户名存在。而在领域层可能执行的是将请求参数对应的请求对象转变为系统中的内部对象,其不再显示用户名,而是通过转变成的内部对象对请求参数进行判断。在数据层可能执行的是对用户密码的判断过程,其执行的操作就是密码的判断。所以,针对一个登陆请求,服务层、领域层和数据层所执行的操作是不同的,相应的,执行操作所产生的日志信息也是不同的,但所有层的日志信息均是涉及登陆这一请求的。

上述两个步骤已经获取了相应的日志打印组件以及每层与业务请求相关的日志信息,下述步骤即使通过日志打印组件进行日志打印的过程。

请继续参照图2,步骤S102-3,采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中。

该步骤是在上述两个步骤的基础上完成的,所述日志打印组件是与业务请求的类型对应的,相同类型的业务请求将对应一个日志打印组件,则该日志打印组件将每层中获取的该类型的业务请求所产生的日志信息打印到同一个日志文件中。

由于所述分层构架的业务系统包括请求入口层和若干个被调用层;所述请求入口层是所述业务请求的进入所述业务系统的最上层;所述若干个被调用层用于按照调用顺序,依次被上一层所调用。

相应的,所述基于所述业务请求的类型,为所述业务请求确定对应的日志打印组件步骤,是在所述请求入口层,基于所述业务请求的类型,为所述业务请求确定对应的日志打印组件。

需要说明的是,所述业务请求所产生的需要记录的日志信息步骤中的日志信息采用以下方式获取:

所述分层构架的业务系统中每一层根据接收到的业务请求的请求参数进行相应层的业务调用,每层可获取与请求参数对应的返回结果;将所述请求参数与返回结果作为所述日志信息。

也就是,针对正常的业务调用所涉及的日志信息包括请求参数和返回结果,并且最终将该请求参数和返回结果打印至相应的日志文件中即可。

另外,除了上述正常的业务调用,还涉及额外的业务调用,因此,所述业务请求所产生的需要记录的日志信息步骤中的日志信息还包括额外业务请求信息,所述额外业务请求信息是指请求方发送的额外业务请求所对应的指定的所需要打印的信息。

相应的,在涉及所述额外业务请求的相应层,获取额外业务请求对应的日志打印组件;获取所述额外请求业务对应的额外请求参数及返回的所需要打印的指定信息;采用所述日志打印组件将获取的额外请求参数及返回的指定信息打印到相应的日志文件中。

上述步骤中已经获取了日志打印组件,并且该日志打印组件与业务请求的类型是相互对应的,因此,后续步骤是通过该日志打印组件对获取的日志信息进行打印的过程。

请继续参照图1,步骤S103,将所述业务请求在对应的层中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中。

在步骤S102中已经介绍过,可以基于所述业务请求的类型,为所述业务请求确定对应的日志打印组件之后,在线程本地变量中将上述日志打印组件以及该日志打印组件与对应的业务请求之间的对应关系进行存储,后续步骤中可以从所述线程本地变量中获取相应的日志打印组件。

具体的,该步骤是采用以下步骤实现的:

在分层构架的业务系统的不同层中,根据所述业务请求的类型确定与该业务请求对应的日志打印组件。

由于所述分层构架的业务系统包括请求入口层和若干个被调用层。所述请求入口层是所述业务请求的进入所述业务系统的最上层;所述若干个被调用层用于按照调用顺序,依次被上一层所调用。从而依据调用顺序使每层中均可以调用获取与业务请求所对应的日志打印组件。

进而,获取不同层中的业务请求所产生的需要记录的日志信息。

需要说明的是,所述业务请求所产生的需要记录的日志信息步骤中的日志信息采用以下方式获取:

所述分层构架的业务系统中每一层根据接收到的业务请求的请求参数进行相应层的业务调用,每层可获取与请求参数对应的返回结果;将所述请求参数与返回结果作为所述日志信息。

另外,需要说明的是,由于在业务系统包括的多层中涉及各层之间的调用顺序,因此,所述采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中时,该日志文件中的日志信息的排列也可以具有顺序,具体的,该排列顺序可以是根据业务系统中多层之间的调用顺序进行排列的,相应的,可以根据所述调用顺序,确定打印到日志文件中的日志信息的顺序。

也就是,针对正常的业务调用所涉及的日志信息包括请求参数和返回结果,并且最终将该请求参数和返回结果打印至相应的日志文件中即可。

另外,除了上述正常的业务调用,还涉及额外的业务调用,因此,所述业务请求所产生的需要记录的日志信息步骤中的日志信息还包括额外业务请求信息,所述额外业务请求信息是指请求方发送的额外业务请求所对应的指定的所需要打印的信息。

相应的,所述将所述业务请求所产生的需要记录的日志信息,采用与该业务请求相对应的日志打印组件打印到相应的日志文件中步骤包括:

在涉及所述额外业务请求的相应层,获取额外业务请求对应的日志打印组件;获取所述额外请求业务对应的额外请求参数及返回的所需要打印的指定信息;采用所述日志打印组件将获取的额外请求参数及返回的指定信息打印到相应的日志文件中。

针对每一个业务请求,该业务请求在业务系统中的每一层执行的操作是不同的,相应的,每层中执行的操作所产生的信息称为日志信息,因此,根据每一层的不同操作,将会形成不同的日志信息。

具体的,例如,登陆这一请求,根据每层的作用不同,则每层所执行的操作也不同,例如,针对服务层、领域层和数据层,在服务层可能执行的是将用户登陆的用户名作为请求参数,判定系统中是否有该用户名存在。而在领域层可能执行的是将请求参数对应的请求对象转变为系统中的内部对象,其不再显示用户名,而是通过转变成的内部对象对请求参数进行判断。在数据层可能执行的是对用户密码的判断过程,其执行的操作就是密码的判断。所以,针对一个登陆请求,服务层、领域层和数据层所执行的操作是不同的,相应的,执行操作所产生的日志信息也是不同的,但所有层的日志信息均是涉及登陆这一请求的。

之后,采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中。

如果业务类型相同,则在不同层中获得的日志打印组件是相同的,相应的,采用该相同的日志打印组件将每层中的日志信息打印到的日志文件也是相同的。

此外,在执行完日志打印任务之后,需要将此次业务请求的结果返回给请求方,该具体的返回方式如下:

在所采用获取的日志打印组件将每层的日志信息打印到相同的日志文件中步骤之后,执行以下操作:

按照调用顺序的反顺序依次返回业务请求的结果。

被请求入口层调用的被调用层将业务请求的结果返回至请求入口层之后,所述请求入口层将业务请求的结果返回给请求方。

为了方便理解,本申请第一实施例通过具体的事例对上述方法进行说明,图3是本申请第一实施例提供的服务层接受业务请求时的时序的状态图。图4是本申请第一实施例提供的领域层接受服务层业务调用的时序的状态图。图5是本申请第一实施例提供的使用日志打印组件打印日志的时序的状态图。

图3是针对服务层接受业务请求的时序,请参照图3,该服务层是业务系统的外部调用的请求入口层,在该服务层中,首先通过服务层入口位置设置的日志拦截器拦截业务请求,拦截该业务请求之后,将会执行针对该次业务请求进行日志打印的任务。具体该日志打印任务首先是通过对服务层的接口方法的设置确定该业务请求对应的日志打印组件(logger),并且将确定的该logger返回至日志拦截器,同时,将该获取到的logger放置到线程本地变量(ThreadLocal)中,并返回。之后可以向服务层的业务代码位置发送正常业务的请求,并将正常业务的结果进行返回,之后再采用logger打印本次业务请求的参数和返回的结果,最终向请求方返回此次业务请求的结果。

图4是针对领域层接受服务层业务调用的时序,请参照图4,该数据层接收服务层的调用后,首先领域层的日志拦截器将会拦截该请求,并从ThreadLocal中获取当前业务请求对应的logger,并返回,之后再向领域层业务代码发送正常业务的调用,返回该正常业务调用的结果,然后使用获得的logger打印领域层的请求的入参和结果,最后向服务层返回此次业务的结果。

而数据层接受领域层业务调用的时序与所述领域层接受服务层的业务调用的时序是相类似的,此处不再赘述。

图5是针对正常业务的调用及打印的过程,请参照图5,首先向日志打印工具模块发起打印日志调用参数,传送要打印的信息,之后从ThreadLocal中获取当前业务请求对应的logger,并返回,然后使用获得的logger打印传入的日志信息,最终此次打印的结果。

总之,当日志拦截器在请求入口拦截到业务请求之后,根据调用的接口方法从业务信息配置模块获取到该业务请求对应的日志打印组件,然后将该日志打印组件放置到ThreadLocal中。后续层次拦截器在拦截到调用后,都从ThreadLocal中获取到当前业务的logger,然后采用该获取到的logger进行日志打印。

因此,该方法可以将一次业务请求的日志打印在一个文件中,线上排查问题和监控对于一个业务只需要关注一个日志文件,减少了干扰,同时增强了监控系统的性能。另外,本方法还可以通过预设方式打印每个层次的请求参数和返回结果,无需显示传递logger,因此,对业务代码无侵入性,配置使用简单,能够使开发人员专注于业务代码,无需额外关系日志的打印。

本申请第二实施例提供一种日志打印装置,图6是本申请第二实施例提供的日志打印装置的结构示意图,请参照图6,该装置包括:

业务请求接收单元601,用于接收业务请求;

日志打印组件确定单元602,用于根据所述业务请求,确定对应的层以及对应的日志打印组件;

日志信息打印单元603,用于将所述业务请求在对应的层中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中。

可选的,该装置还包括:

存储单元,用于在所述根据所述业务请求,确定对应层以及对应的日志打印组件之后,存储所述日志打印组件以及该日志打印组件与对应的业务请求之间的对应关系;

所述日志信息打印单元包括:

日志打印组件获取子单元,用于在业务系统的不同层中,根据所述业务请求的类型确定该业务请求所对应的日志打印组件;

日志信息获取子单元,用于获取不同层中的业务请求所产生的需要记录的日志信息;

打印子单元,用于采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中。

可选的,所述业务系统的多个层中包括请求入口层和若干个被调用层;

所述请求入口层是所述业务请求的进入业务系统的起始层,并可调用所述被调用层;所述若干个被调用层至少部分层与层之间具有调用顺序,按照调用顺序依次被上一层所调用;

所述日志打印组件确定单元是在所述请求入口层进行的。

可选的,所述日志打印组件获取子单元包括:

调用子单元,用于将业务请求的请求参数作为接口参数,根据所述调用顺序依次调用不同层的业务系统的层;

获取子单元,用于不同层分别根据所述业务请求的类型确定与该业务请求所对应的日志打印组件。

可选的,该装置还包括:

业务请求结果返回单元,用于在所述采用确定的日志打印组件将不同层的日志信息打印到所述业务请求对应的日志文件中,按照调用顺序的反顺序依次返回业务请求的结果;

结果返回请求方单元,用于被请求入口层调用的被调用层将业务请求的结果返回至请求入口层之后,所述请求入口层将业务请求的结果返回给请求方。

可选的,所述业务请求在对应的层中所产生的日志信息中的日志信息还包括额外业务请求信息,所述额外业务请求信息是指请求方发送的额外业务请求所对应的指定的所需要打印的信息;

所述日志信息打印单元包括:

额外请求获取子单元,用于在包含有所述额外业务请求的层,确定额外业务请求对应的日志打印组件;

指定信息获取子单元,用于获取所述额外请求业务对应的额外请求参数及返回的所需要打印的指定信息;

指定信息打印子单元,用于采用确定的所述日志打印组件将获取的额外请求参数及返回的指定信息打印到与该额外业务请求所对应的日志文件中。

可选的,所述日志打印组件确定单元包括:

类型获取子单元,用于获取业务请求的所对应类型;

打印子单元,用于基于所述业务请求的所对应类型,采用预设方式设置该业务请求的接口方法以使得业务请求与相应的日志打印组件之间具有对应关系。

可选的,还包括:

日志拦截方式设置单元,用于预先采用预设方式为每层设置日志拦截方式;

日志打印任务执行单元,用于在所述接收业务请求之后,不同层均采用所述日志拦截方式分别拦截相应层的业务请求,以执行相应业务请求的日志打印任务。

本申请第三实施例还提供一种日志打印系统,图7是本申请第三实施例提供的日志打印系统的结构示意图,请参照图7,该系统包括:

自动拦截器模块701,用于拦截业务请求,并采用预设方式将日志拦截器配置到业务系统的各个层的接口上;

业务信息配置模块702,用于接收自动拦截器模块拦截的业务请求,并基于业务请求,为业务请求配置以确定与该业务请求所对应的日志打印组件;

日志打印工具模块703,用于在自动拦截器模块拦截到业务请求之后,采用业务信息配置模块配置的日志打印组件在业务系统中打印日志。

可选的,所述自动拦截器模块是通过面向切面的方式设置于所述业务系统的各个层的接口上的。

可选的,所述业务信息配置模块将配置好的日志打印组件与业务请求的对应关系存储在用于维护该对应关系的线程上;

相应的,所述日志打印工具模块从所述线程上获取日志打印组件与业务请求的对应关系,并采用该日志打印组件将相应的业务请求的操作所产生的日志信息打印到相应的日志文件中。

具体的,所述业务信息配置模块设置于请求入口层中,该业务信息配置模块支持使用注解和xml配置方式,将业务的接口方法和日志文件对应起来。优选的,可以使用注解方式,该注解方式只需在业务接口方法上加上日志文件的注解即可。

所述拦截器业务系统的请求入口拦截到请求后,根据调用的接口方法从业务信息配置模块获取到业务对应的日志logger,然后将logger放置到threadlocal中。后续层次拦截器在拦截到调用后都从threadlocal中获取到当前业务的logger,然后使用这个logger打印日志。

所述日志打印工具模块无需显式传递logger,在打印日志的时候会从threadlocal中获取到当前业务的logger,然后使用这个logger打印日志。并且,当业务系统有额外的业务打印需求时,也可以使用日志打印工具模块在业务系统中打印日志。

本申请第四实施例提供一种电子设备,图8是本申请第四实施例提供的电子设备的结构示意图,请参照图8,该电子设备包括:

显示器801;

处理器802;

存储器803;用于存储日志打印的程序,该设备通电并运行该日志打印的程序后,执行下述步骤:接收业务请求;根据所述业务请求,确定对应层以及对应的日志打印组件;将所述业务请求在对应层的中所产生的日志信息,采用所述确定的日志打印组件打印到日志文件中,其中,该方法应用于业务系统中,所述业务系统包括多个层。

本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1