发明内容
本发明提供一种日志输出方法和装置,以能够针对不同用户设备输出不同基于线程级别的日志信息。
为了达到上述目的,本发明具体是通过如下技术方案实现的:
一种日志输出方法,应用于包括用户设备和Web服务器的Web应用系统中,所述Web服务器上记录有跟踪列表文件,且所述跟踪列表文件中记录了用户设备的IP地址,该方法包括以下步骤:
所述Web服务器在接收到用户设备的访问请求时,获取所述用户设备对应的IP地址,并通过所述IP地址查询所述跟踪列表文件中记录的IP地址;
如果所述跟踪列表文件中有所述IP地址对应的记录,则所述Web服务器将所述访问请求对应的线程ID记录到内存变量中;
所述Web服务器在需要输出当前线程ID对应的日志信息时,通过所述当前线程ID查询所述内存变量中记录的线程ID;
如果所述内存变量中有所述当前线程ID对应的记录,则所述Web服务器输出所述当前线程ID对应的用户设备的指定日志级别的日志信息。
所述Web服务器将所述访问请求对应的线程ID记录到内存变量中,之后还包括:所述Web服务器在所述访问请求处理完成之后,从所述内存变量中删除所述访问请求对应的线程ID。
所述Web服务器通过所述当前线程ID查询所述内存变量中记录的线程ID,之后还包括:如果所述内存变量中没有所述当前线程ID对应的记录,则所述Web服务器输出所述当前线程ID对应的用户设备的原始日志级别的日志信息。
所述指定日志级别比所述原始日志级别的日志级别高。
所述跟踪列表文件中记录的IP地址具体为:需要详细输出指定日志级别日志信息的用户设备的IP地址。
本发明提供一种Web服务器,应用于包括用户设备和所述Web服务器的Web应用系统中,所述Web服务器上维护有跟踪列表文件,且所述Web服务器包括:
第一记录模块,用于在所述跟踪列表文件中记录用户设备的IP地址;
第一查询模块,用于在接收到用户设备的访问请求时,获取所述用户设备对应的IP地址,通过所述IP地址查询所述跟踪列表文件中记录的IP地址;
第二记录模块,用于在所述跟踪列表文件中有所述IP地址对应的记录时,将所述访问请求对应的线程ID记录到内存变量中;
第二查询模块,用于在需要输出当前线程ID对应的日志信息时,通过所述当前线程ID查询所述内存变量中记录的线程ID;
输出模块,用于当所述内存变量中有所述当前线程ID对应的记录时,输出所述当前线程ID对应的用户设备的指定日志级别的日志信息。
还包括:删除模块,用于在所述访问请求处理完成之后,从所述内存变量中删除所述访问请求对应的线程ID。
所述输出模块,还用于当所述内存变量中没有所述当前线程ID对应的记录时,输出所述当前线程ID对应的用户设备的原始日志级别的日志信息。
所述指定日志级别比所述原始日志级别的日志级别高。
所述跟踪列表文件中记录的IP地址具体为:需要详细输出指定日志级别日志信息的用户设备的IP地址。
与现有技术相比,本发明至少具有以下优点:本发明中,Web服务器能够针对不同用户设备输出不同日志级别的日志信息,从而会产生更加清晰的日志信息,继而大大提高Web应用系统分析和定位问题的效率。
具体实施方式
本发明提出一种日志输出方法,该方法应用于包括多个用户设备(即客户端)和Web服务器的Web应用系统中,并能够根据实际情形需要,输出不同用户设备的指定日志级别或者原始日志级别的日志信息。
为了实现本发明目的,本发明会利用每个用户设备所对应的IP地址,为了能够针对不同用户设备输出指定日志级别的日志信息,在本发明中,需要在Web服务器上记录跟踪列表文件(如ip_list.conf文件),该跟踪列表文件中记录了用户设备的IP地址,且该跟踪列表文件中记录的IP地址具体为:需要详细输出指定日志级别日志信息的用户设备的IP地址。
具体的,在某应用场景下(例如:用户设备在上线(即访问Web服务器)之后,如果发现该用户设备出现异常,此时,该用户设备可能需要详细输出指定日志级别的日志信息),如果需要获取用户设备详细的指定日志级别的日志信息,此时,可以将该用户设备的IP地址加载到跟踪列表文件中,以在后续过程中对该用户设备输出指定日志级别的日志信息。
例如,用户设备1和用户设备2在上线之后,如果发现用户设备1和用户设备2为需要详细输出指定日志级别日志信息的用户设备,则需要将IP地址1(用户设备1的IP地址)和IP地址2(用户设备2的IP地址)加载到跟踪列表文件中;用户设备3和用户设备4在上线之后,如果发现用户设备3和用户设备4为不需要详细输出指定日志级别日志信息的用户设备,则不需要将用户设备3和用户设备4的IP地址加载到跟踪列表文件中;基于此,在Web服务器上维护的跟踪列表文件中,将记录有IP地址1和IP地址2。
基于跟踪列表文件中记录的IP地址,如图1所示,该方法包括以下步骤:
步骤1、Web服务器在接收到用户设备的访问请求(如HTTP(Hyper TextTransfer Protocol,超文本传输协议)访问请求)时,获取用户设备对应的IP地址,并通过该IP地址查询跟踪列表文件中记录的IP地址,判断跟踪列表文件中是否有该IP地址对应的记录。
如果是,则执行步骤2;如果否,则执行步骤3;例如,对于用户设备1和用户设备2的访问请求,跟踪列表文件中将有IP地址1和IP地址2对应的记录,此情况下执行步骤2;对于用户设备3和用户设备4的访问请求,跟踪列表文件中将没有其IP地址对应的记录,此情况下执行步骤3。
步骤2、Web服务器将访问请求对应的线程ID记录到内存变量中。
本发明中,对于用户设备的每个访问请求,Web服务器上均会分配一个唯一的线程ID(即操作系统识别线程的唯一标志);在该访问请求处理完成之前,该访问请求对应的线程ID不会发生变化;在该访问请求处理完成之后,Web服务器可以将该访问请求对应的线程ID分配给其它访问请求。
进一步地,基于此访问请求对应的线程ID,Web服务器在将访问请求对应的线程ID记录到内存变量之后,如果该访问请求被处理完成,则该Web服务器还需要从内存变量中删除该访问请求对应的线程ID。
步骤3、Web服务器输出当前线程ID(即当前待处理的访问请求对应的线程ID)对应的日志信息时,通过当前线程ID查询内存变量中记录的线程ID,并判断内存变量中是否有当前线程ID对应的记录;如果是,则执行步骤4;如果否,则执行步骤5。
本步骤中,在访问请求的处理过程中,所述Web服务器会根据预定的策略实时输出当前线程ID对应的日志信息并加以保存,以便实时或后续了解该Web服务器上具体应用的运行状态。其中,
如果判断该访问请求对应的线程ID在Web服务器的内存变量中存在,表明此时有对当前用户设备输出详细的指定级别的日志信息的需求,此时,执行步骤4;如果判断该访问请求对应的线程ID在Web服务器的内存变量中不存在,则表明当前用户没有输出指定日志级别的日志信息的需求,此时,则执行步骤5。
步骤4、Web服务器输出当前线程ID对应的用户设备的指定日志级别的日志信息。
本发明中,当在跟踪列表文件中有用户设备的IP地址对应的记录时,该IP地址的访问请求所对应的线程ID由于已记录在内存变量中,Web服务器在需要输出该线程ID对应的日志信息时,可以查询到内存变量中有该线程ID对应的记录,此时将输出当前线程ID对应的用户设备的指定日志级别的日志信息。
步骤5、Web服务器输出当前线程ID对应的用户设备的原始日志级别的日志信息。
本发明中,当在跟踪列表文件中没有用户设备的IP地址对应的记录时,该IP地址的访问请求所对应的线程ID未记录在内存变量中,Web服务器在输出该线程ID对应的日志信息时,由于内存变量中没有该线程ID对应的记录,因此不会输出当前线程ID对应的用户设备的指定日志级别的日志信息;此时,则根据预定的策略输出该用户设备的原始日志级别的日志信息。
本发明中,指定日志级别比原始日志级别的日志级别高。
需要说明的是,由于日志级别包括但不限于致命级别、错误级别、警告级别、信息级别、调试级别。具体地,调试级别比信息级别的日志级别高(即调试级别的日志信息比信息级别的日志信息更加详细),信息级别比警告级别的日志级别高(即信息级别的日志信息比警告级别的日志信息更加详细),警告级别比错误级别的日志级别高(即警告级别的日志信息比错误级别的日志信息更加详细),错误级别比致命级别的日志级别高(即错误级别的日志信息比致命级别的日志信息更加详细)。
因此,在设置指定日志级别和原始日志级别时,如果原始日志级别为致命级别,则指定日志级别可以为错误级别、或警告级别、或信息级别、或调试级别;如果原始日志级别为错误级别,则指定日志级别可以为警告级别、或信息级别、或调试级别;如果原始日志级别为警告级别,则指定日志级别可以为信息级别、或调试级别;如果原始日志级别为信息级别,则指定日志级别可以为调试级别。
考虑到AOP(Aspect Oriented Programming,面向切面编程)方式可以通过预编译方式和运行期动态代理,实现“在不修改源代码的情况下给程序动态统一添加功能”;本发明中,为了能够实现当内存变量中有当前线程ID对应的记录时,输出当前线程ID对应的用户设备的指定日志级别的日志信息,当内存变量中没有当前线程ID对应的记录时,输出当前线程ID对应的用户设备的原始日志级别的日志信息;在一种优选的实施方式中,可以通过AOP(如Spring AOP)方式对现有技术中的“确定日志级别”的方法进行调整,使得在内存变量中没有当前线程ID对应的记录时,按照现有方式进行处理,即输出当前线程ID对应的用户设备的原始日志级别(现有方式中由Web服务器设置的日志级别)的日志信息;在内存变量中有当前线程ID对应的记录时,按照本发明提供的方式进行处理,即输出当前线程ID对应的用户设备的指定日志级别的日志信息,该指定日志级别由AOP方式编程确定,Web服务器直接输出该指定日志级别的日志信息。
本发明中,为了更加清晰的输出指定日志级别的日志信息,在具体实现过程中,还可以直接将指定日志级别的日志信息记录到独立的日志文件中,并通过该日志文件输出指定日志级别的日志信息。
基于与上述方法同样的发明构思,本发明还提出了一种Web服务器,应用于包括用户设备(即客户端)和所述Web服务器的Web应用系统中,并能够根据实际情形需要,输出不同用户设备的指定日志级别或者原始日志级别的日志信息。
为了实现本发明目的,本发明会利用每个用户设备所对应的IP地址,为了能够针对不同用户设备输出指定日志级别的日志信息,在本发明中,需要在Web服务器上记录跟踪列表文件(如ip_list.conf文件),该跟踪列表文件中记录了用户设备的IP地址;其中,用户设备在上线(即访问Web服务器)之后,如果发现该用户设备出现异常,则认为该用户设备需要详细输出指定日志级别的日志信息,此时可以将该用户设备的IP地址加载到跟踪列表文件中。
如图2所示,所述Web服务器包括:
第一记录模块11,用于在所述跟踪列表文件中记录需要跟踪指定日志级别日志信息的用户设备的IP地址,且该跟踪列表文件中记录的IP地址具体为:需要详细输出指定日志级别日志信息的用户设备的IP地址;例如,用户设备1和用户设备2在上线之后,如果发现用户设备1和用户设备2为需要详细输出指定日志级别日志信息的用户设备,则需要将IP地址1(用户设备1的IP地址)和IP地址2(用户设备2的IP地址)加载到跟踪列表文件中;用户设备3和用户设备4在上线之后,如果发现用户设备3和用户设备4为不需要详细输出指定日志级别日志信息的用户设备,则不需要将用户设备3和用户设备4的IP地址加载到跟踪列表文件中;基于此,在Web服务器上维护的跟踪列表文件中,只需要记录IP地址1和IP地址2。
第一查询模块12,用于在接收到用户设备的访问请求(如HTTP访问请求)时,获取所述用户设备对应的IP地址,并通过所述IP地址查询所述跟踪列表文件中记录的IP地址。
第二记录模块13,用于在所述跟踪列表文件中有所述IP地址对应的记录时,将所述访问请求对应的线程ID记录到内存变量中。
第二查询模块14,用于输出当前线程ID(即当前待处理的访问请求所对应的线程ID)对应的日志信息时,通过所述当前线程ID查询所述内存变量中记录的线程ID。
输出模块15,用于当所述内存变量中有所述当前线程ID对应的记录时,输出所述当前线程ID对应的用户设备的指定日志级别的日志信息;当所述内存变量中没有所述当前线程ID对应的记录时,输出所述当前线程ID对应的用户设备的原始日志级别的日志信息。
本发明中,指定日志级别比原始日志级别的日志级别高。
需要说明的是,由于日志级别具体包括但不限于致命级别、错误级别、警告级别、信息级别、调试级别,且调试级别比信息级别的日志级别高(即调试级别的日志信息比信息级别的日志信息更加详细),信息级别比警告级别的日志级别高(即信息级别的日志信息比警告级别的日志信息更加详细),警告级别比错误级别的日志级别高(即警告级别的日志信息比错误级别的日志信息更加详细),错误级别比致命级别的日志级别高(即错误级别的日志信息比致命级别的日志信息更加详细)。
因此,在设置指定日志级别和原始日志级别时,如果原始日志级别为致命级别,则指定日志级别可以为错误级别、或警告级别、或信息级别、或调试级别;如果原始日志级别为错误级别,则指定日志级别可以为警告级别、或信息级别、或调试级别;如果原始日志级别为警告级别,则指定日志级别可以为信息级别、或调试级别;如果原始日志级别为信息级别,则指定日志级别可以为调试级别。
本发明中,该Web服务器还包括删除模块16,该删除模块16用于在将访问请求对应的线程ID记录到内存变量之后,在所述访问请求处理完成时,从所述内存变量中删除所述访问请求对应的线程ID。
其中,本发明装置的各个模块可以集成于一体,也可以分离部署。上述模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。