发明内容
本公开实施例至少提供一种日志收集的方法、装置、电子设备、及存储介质。
第一方面,本公开实施例提供了一种日志收集的方法,所述方法包括:
为应用程序的主进程创建子进程;其中,所述子进程用于获取所述应用程序运行过程产生的日志信息;
通过所述子进程获取所述应用程序对应的日志信息,并将所述日志信息存储至临时日志存储文件;
通过所述主进程将所述临时日志存储文件发送给服务器。
一种可选的实施方式中,所述通过所述子进程获取所述应用程序对应的日志信息,包括:
获取所述应用程序当前运行的操作系统的系统版本信息,作为目标系统版本信息;
基于预设的系统版本信息与日志信息存储节点的对应关系表,查询与所述目标系统版本信息对应的目标日志信息存储节点;
从所述目标日志信息存储节点中获取所述应用程序对应的日志信息。
一种可选的实施方式中,所述将所述日志信息存储至临时日志存储文件,包括:
基于预设的存储格式和加密格式,对所述日志信息格式化处理并加密存储至所述临时日志存储文件中。
一种可选的实施方式中,在向所述服务器发送所述临时日志存储文件之前,所述方法还包括:
当所述临时日志存储文件的字节数大于预设阈值时,为所述临时日志存储文件添加有效文件标识;
当所述临时日志存储文件的字节数小于或等于所述预设阈值时,为所述临时日志存储文件添加无效文件标识;
通过所述主进程将所述临时日志存储文件发送给服务器,包括:
通过所述主进程将添加有所述有效文件标识或所述无效文件标识的所述临时日志存储文件发送给所述服务器。
一种可选的实施方式中,所述为应用程序的主进程创建子进程,包括:
当应用程序发生异常时,为所述应用程序的主进程创建子进程;和/或,
当到达日志采集周期时间时,为所述应用程序的主进程创建子进程;和/或,
响应于服务器发送的日志采集请求,为所述应用程序的主进程创建子进程。
一种可选的实施方式中,当应用程序发生异常时,为所述应用程序的主进程创建子进程时,所述方法还包括:
获取所述应用程序对应的异常信息,所述异常信息包括以下一种或多种:NativeCrash类型崩溃日志、java Crash类型崩溃日志、Anr栈信息;
通过所述主进程将所述应用程序对应的异常信息发送给服务器。
一种可选的实施方式中,所述通过所述子进程获取所述应用程序对应的日志信息,包括:
获取本地存储的目标库函数信息;
基于所述目标库函数信息,调用目标库函数获取所述应用程序对应的日志信息。
第二方面,本公开实施例还提供一种日志收集的装置,包括:
创建模块,用于为应用程序的主进程创建子进程;其中,所述子进程用于获取所述应用程序产生的日志信息;
获取模块,用于通过所述子进程获取所述应用程序对应的日志信息,并将所述日志信息存储至临时日志存储文件;
发送模块,用于通过所述主进程将所述临时日志存储文件发送给服务器。
一种可选的实施方式中,所述获取模块,在通过所述子进程获取所述应用程序对应的日志信息时,用于:
获取所述应用程序当前运行的操作系统的系统版本信息,作为目标系统版本信息;
基于预设的系统版本信息与日志信息存储节点的对应关系表,查询与所述目标系统版本信息对应的目标日志信息存储节点;
从所述目标日志信息存储节点中获取所述应用程序对应的日志信息。
一种可选的实施方式中,所述获取模块,在将所述日志信息存储至临时日志存储文件时,用于:
基于预设的存储格式和加密格式,对所述日志信息格式化处理并加密存储至所述临时日志存储文件中。
一种可选的实施方式中,在向所述服务器发送所述临时日志存储文件之前,所述装置还包括:判断模块,用于:
当所述临时日志存储文件的字节数大于预设阈值时,为所述临时日志存储文件添加有效文件标识;
当所述临时日志存储文件的字节数小于或等于所述预设阈值时,为所述临时日志存储文件添加无效文件标识;
所述发送模块,在通过所述主进程将所述临时日志存储文件发送给服务器时,用于:
通过所述主进程将添加有所述有效文件标识或所述无效文件标识的所述临时日志存储文件发送给所述服务器。
一种可选的实施方式中,所述创建模块,在为应用程序的主进程创建子进程时,用于:
当应用程序发生异常时,为所述应用程序的主进程创建子进程;和/或,
当到达日志采集周期时间时,为所述应用程序的主进程创建子进程;和/或,
响应于服务器发送的日志采集请求,为所述应用程序的主进程创建子进程。
一种可选的实施方式中,当应用程序发生异常时,为所述应用程序的主进程创建子进程时,所述装置还包括:异常获取模块,用于:
获取所述应用程序对应的异常信息,所述异常信息包括以下一种或多种:NativeCrash类型崩溃日志、java Crash类型崩溃日志、Anr栈信息;
通过所述主进程将所述应用程序对应的异常信息发送给服务器。
一种可选的实施方式中,所述获取模块,在通过所述子进程获取所述应用程序对应的日志信息时,用于:
获取本地存储的目标库函数信息;
基于所述目标库函数信息,调用目标库函数获取所述应用程序对应的日志信息。
第三方面,本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
上述方法中,在确定需要获取应用程序的日志信息时,可以为应用程序的主进程创建子进程,在子进程获取应用程序对应的日志信息,并将日志信息存储至临时日志存储文件,完成日志信息的抓取,该方法不用依赖系统自身的日志抓取程序,避免应用程序无法获取到对应的日志信息的情况发生,以便服务器可以基于临时日志存储文件检测应用程序的运行状况。同时,主进程与子进程之间并行工作,在主进程发生异常无法正常工作时,子进程也可以获取应用程序的日志信息,提高了日志信息获取的效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
一般的,安卓系统中应用程序是不能直接抓取应用程序对应的运行日志的,需要借助系统提供的日志抓取(logcat)程序来抓取运行日志。但是,由于厂商在手机出厂时,可以通过修改logcat机制,限制应用程序抓取运行日志,或者,可以通过设置权限,限制应用程序启动系统中的logcat程序,造成应用程序无法获取到对应的运行日志。故为了解决上述问题,本公开提供了一种日志收集的方法、装置、电子设备、及存储介质。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种日志收集的方法进行详细介绍,本公开实施例所提供的日志收集的方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该日志收集的方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面对本公开实施例提供的日志收集的方法加以说明。
实施例一
参见图1所示,为本公开实施例提供的日志收集的方法的流程图,该方法应用于客户端,所述方法包括步骤S101~S103,其中:
S101,为应用程序的主进程创建子进程;其中,所述子进程用于获取所述应用程序运行过程产生的日志信息。
S102,通过所述子进程获取所述应用程序对应的日志信息,并将所述日志信息存储至临时日志存储文件;
S103,通过主进程将临时日志存储文件发送给服务器。
上述方法中,在确定需要获取应用程序的日志信息时,可以为应用程序的主进程创建子进程,通过子进程获取应用程序对应的日志信息,并将日志信息存储至临时日志存储文件,完成日志信息的抓取,该方法不用依赖系统自身的日志抓取程序,避免应用程序无法获取到对应的日志信息的情况发生,以便服务器可以基于临时日志存储文件检测应用程序的运行状况。同时,主进程与子进程并行工作,在主进程发生异常无法正常工作时,子进程也可以获取应用程序的日志信息,提高了日志信息的获取效率。
针对S101:
在应用程序启动之后,在确定该应用程序需要获取对应的日志信息时,可以为应用程序的主进程创建子进程。具体实施时,可以通过调用fork函数为主进程创建子进程。其中,该子进程用于获取应用程序运行过程产生的日志信息,该日志信息为运行日志中包括的信息。
一种可选实施方式中,所述为应用程序的主进程创建子进程,包括:
情况一、当应用程序发生异常时,为所述应用程序的主进程创建子进程;
情况二、响应于服务器发送的日志采集请求,为所述应用程序的主进程创建子进程;
情况三、当到达日志采集周期时间时,为所述应用程序的主进程创建子进程。
在满足上述一种或多种情况时,确定应用程序需要获取日志信息,即确定为应用程序的主进程创建子进程。比如,在应用程序发生异常时,确定应用程序需要获取日志信息,则为应用程序的主进程创建子进程。
针对情况一,在应用程序发生异常时,可以确定当前运行的应用程序需要获取日志信息。示例性的,应用程序发生异常可以为应用程序无响应、应用程序闪退、应用程序卡顿、应用程序运行较慢等。其中,应用程序的异常表现可以根据实际需要进行设置。
针对情况二,在客户端接收到服务器发送的日志采集请求时,则确定当前运行的应用程序需要获取日志信息;进而响应于服务器采集的日志采集请求,为应用程序的主进程创建子进程。比如,服务器可以在需要查看运行日志时,生成日志采集请求,并将生成的日志采集请求发送给客户端;或者,客户端可以生成日志采集请求,再响应于服务器发送的日志采集请求,为应用程序的主进程创建子进程。
针对情况三,可以设置获取日志信息的周期,在应用程序启动之后,若确定当前时刻达到获取日志信息的周期时间时,则为应用程序的主进程创建子进程,以便可以通过子进程获取应用程序的日志信息。
上述实施方式中,通过设置多种情况,在满足一种或多种情况时,可以获取当前运行的应用程序的日志信息,日志信息的获取条件较为灵活,可以主动获取(比如,接收到服务器发送的日志采集请求的情况),也可以被动获取(比如,确定应用程序发生异常的情况)。
针对S102以及S103:
在创建了子进程之后,可以在子进程中配置子进程的基本信息,在配置了子进程的基本信息之后,通过子进程获取应用程序对应的日志信息,并将日志信息存储在创建的临时日志存储文件中。
具体实施时,可以在配置了子进程的基本信息之后,通过子进程创建并打开临时日志存储文件。以便在获取了应用程序对应的日志信息之后,可以将日志信息存储在临时日志存储文件中。其中,临时日志存储文件可以为logcat.txt文件。
一种可选实施方式中,将所述日志信息存储至临时日志存储文件,包括:基于预设的存储格式和加密格式,对所述日志信息格式化处理并加密存储至所述临时日志存储文件中。
这里,在获取到日志信息之后,可以将日志信息按照客户端与服务器之间约定的存储格式和/或加密格式,对日志信息进行格式化处理和加密处理,将处理后的日志信息存储至临时日志存储文件中,比如,预设的存储格式可以依次为:时间、名称、日志信息等。其中,预设的存储格式和加密格式可以根据需要进行设置。
在具体实施时,配置子进程的基本信息可以包括通过调用execlp函数为该子进程分配运行空间,并可以在该子进程中写入主函数(main函数)。
在打开临时日志存储文件之后,可以获取应用程序对应的日志信息,并将获取的日志信息存储至临时日志存储文件。进而可以将存储有日志信息的临时日志存储文件存储在客户端本地的、应用程序对应的第一目录下,使得主进程中的目标子线程可以在检测到应用程序对应的第一目录下存在临时日志存储文件时,可以将临时日志存储文件打包后发送给服务器。其中,第一目录的位置可以根据实际需要进行设置。
一种可选实施方式中,获取应用程序对应的日志信息,包括:
一、获取本地存储的目标库函数信息;
二、基于目标库函数信息,调用目标库函数获取应用程序对应的日志信息。
这里,在获取应用程序对应的日志信息时,可以通过子进程获取目标库函数信息,基于获取的目标库函数信息,调用目标库函数获取应用程序对应的日志信息,其中,该目标库函数信息可以用于获取日志信息,目标库函数信息包括函数的名称、功能、调用参数、字段等。
在具体实施时,可以从客户端的目标目录下(该目标目录为存储目标库函数信息的目录),获取目标库函数信息。该目标库函数信息为获取日志信息时需要用到的函数信息,其中,该目标库函数信息可以根据实际需求进行设置。
一种可选实施方式中,在获取本地存储的目标库函数信息之后,还包括:创建并打开所述临时日志存储文件;在获取所述目标库函数信息失败之后,或者,在打开所述临时日志存储文件失败之后,退出所述子进程。
具体实施时,可以在通过子进程创建并打开临时日志存储文件之前,获取目标库函数信息,若成功获取目标库函数信息,则创建并打开临时日志存储文件。若获取目标库函数信息失败,则退出子进程,不执行后续的创建并打开临时日志存储文件的操作,也不执行获取应用程序的日志信息的操作,可以避免该目标库函数信息获取失败时,打开临时日志存储文件造成的资源浪费;若该目标库函数信息获取成功,则执行后续的打开临时日志存储文件的操作,保证后续的获取日志信息的操作可以正常运行。
这里,在获取应用程序对应的日志信息之前,若子进程打开临时日志存储文件失败,则表征临时日志存储文件无法打开,进而后续获取的应用程序无法存储在临时日志存储文件中,故执行退出子进程的步骤,且不执行后续的获取应用程序对应的日志信息的过程。其中,造成无法打开临时日志存储文件的原因有多种,比如,可能为客户端当前的运行内存不足,造成无法打开临时存储文件。
上述实施方式中,在打开临时日志存储文件失败时,表征后续获取的日志信息无法存储在临时日志存储文件中,进而使得无法将获取的日志信息发送给服务器,此时退出子进程,可以避免打开临时日志存储文件失败之后,执行后续获取日志信息的过程时,造成的资源浪费。
一种可选的实施方式中,通过所述子进程获取所述应用程序对应的日志信息,包括:
步骤一、获取所述应用程序当前运行的操作系统的系统版本信息,作为目标系统版本信息;
步骤二、基于预设的系统版本信息与日志信息存储节点的对应关系表,查询与所述目标系统版本信息对应的目标日志信息存储节点;
步骤三、从所述目标日志信息存储节点中获取所述应用程序对应的日志信息。
这里,考虑到不同的系统版本可能对应不同的日志存储节点,比如,安卓4.0版本的系统是读取/dev下的log节点来获取应用程序的日志信息,而安卓5.0版本的系统是通过读取socket节点来获取应用程序的日志信息。
故为了适用于较多的操作系统的系统版本,可以获取应用程序当前运行的操作系统的系统版本信息,作为目标系统版本信息,并确定目标系统版本信息对应的目标日志信息存储节点,从目标日志信息存储节点中获取应用程序对应的日志信息。比如,若获取到目标系统版本信息为安卓4.0版本,则确定该目标系统版本信息对应的目标日志信息存储节点为dev下的log节点,则从dev下的log节点中获取应用程序对应的日志信息。
在具体实施时,可以通过获取系统的安卓软件开发工具包(SoftwareDevelopment Kit,sdk)版本,根据安卓sdk版本与系统版本之间的对应关系,确定安装应用程序的客户端的目标系统版本信息。
一种可选实施方式中,在向所述服务器发送所述临时日志存储文件之前,所述方法还包括:
一、当所述临时日志存储文件的字节个数大于预设阈值时,为所述临时日志存储文件添加有效文件标识。
二、当所述临时日志存储文件的字节数小于或等于所述预设阈值时,为所述临时日志存储文件添加无效文件标识。
通过所述主进程将所述临时日志存储文件发送给服务器,包括:通过所述主进程将添加有所述有效文件标识或所述无效文件标识的所述临时日志存储文件发送给所述服务器。
一般的,在临时日志存储文件的字节数较小时,该临时日志存储文件中包括的日志信息较少,即临时日志存储文件的可用性较低;故可以确定预设阈值,通过预设阈值判断临时日志存储文件的有效或无效。
这里,在将日志信息存储至临时日志存储文件之后,可以确定该临时日志存储文件的字节数,若该字节数大于预设阈值,则确定该临时日志存储文件为有效文件,可以为该临时日志存储文件添加有效文件标识,比如,有效文件标识可以为“1”、或者为“有效”等;若该字节数小于或等于预设阈值,则确定该临时日志存储文件为无效文件,可以为该临时日志存储文件添加无效文件标识,比如,第二标记信息可以为“0”、或者为“无效”等。其中,预设阈值可以根据实际情况进行设置,比如阈值可以为256B。
这里,在为临时日志存储文件添加有效文件标识或无效文件标识之后,可以通过主进程将添加有无效文件标识或有效文件标识的临时日志存储文件发送给服务器。具体实施时,可以通过主进程将添加有无效文件标识或有效文件标识的临时日志存储文件加密打包后,发送给服务器。
一种可选实施方式中,当应用程序发生异常时,为所述应用程序的主进程创建子进程时,所述方法还包括:
获取所述应用程序对应的异常信息,所述异常信息包括以下一种或多种:NativeCrash类型崩溃日志、java Crash类型崩溃日志、Anr栈信息;
通过所述主进程将所述应用程序对应的异常信息发送给服务器。
这里,应用程序对应的异常信息可以为应用程序崩溃时,生成的信息。其中,异常信息的类型可以根据实际需要进行设置,比如,异常信息可以为以下一种或多种:NativeCrash类型崩溃日志、java Crash类型崩溃日志、Anr栈信息。
示例性的,在异常信息包括NativeCrash类型崩溃日志时,可以在获取到系统异常信号时,为该异常信息构建对应的子进程(比如,子进程一),通过构建的子进程一获取应用程序发生Native崩溃时崩溃线程与其他线程名信息、Native栈信息、线程上下文信息等信息,并将获取到的信息存储到Tombstone.txt文件中,通过主进程将存储有异常信息的Tombstone.txt文件发送给服务器。
示例性的,以应用程序发生异常为例,对日志收集的方法进行详细说明,应用程序在发生异常时,可以通过调用fork函数,创建子进程,调用execlp函数为创建的子进程分配运行空间,以及为该子进程写入main函数,接着可以从客户端的本地获取目标库函数信息,在获取目标库函数信息成功之后,创建并打开临时日志存储文件;在获取目标库函数信息失败之后,退出子进程。
进而,在打开临时日志存储文件失败之后,退出子进程;在创建并打开临时日志存储文件成功之后,可以获取安装应用程序的客户端对应的目标系统版本信息,并确定与目标系统版本信息对应的目标日志信息存储节点,从与目标系统版本信息对应的目标日志信息存储节点中,获取应用程序对应的日志信息,并将获取的日志信息预设的存储格式和加密格式,对日志信息格式化处理并加密存储至临时日志存储文件中。
进一步的,还可以确定临时日志存储文件的字节数,并基于确定的字节数为临时日志存储文件添加有效文件标识或无效文件标识,再通过主进程将添加有无效文件标识或有效文件标识的临时日志存储文件发送给服务器。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
在另一种实施方式中,该日志收集的方法还可以应用于服务器,该方法包括下述步骤:
步骤一,接收客户端发送的临时日志存储文件;临时日志存储文件为客户端基于临时创建的子进程创建的、用于存储通过子进程获取到的应用程序对应的日志信息的日志存储文件。
步骤二,判断临时日志存储文件是否为有效文件。
步骤三,若是,则展示临时日志存储文件。
这里,服务器可以接收客户端发送的临时日志存储文件,其中,临时日志存储文件为客户端基于临时创建的子进程创建的、用于存储通过子进程获取到的日志信息的日志存储文件。即该临时日志存储文件为基于实施例一的方式生成的。
在接收到临时日志存储文件之后,可以判断临时日志存储文件是否有效文件,若该临时日志存储文件为有效文件,则在服务器上展示该临时日志存储文件;若该临时日志存储文件为无效文件,则不再服务器上展示该临时日志存储文件。
判断临时日志存储文件是否为有效文件,可以包括:
方式一、在解析到临时日志存储文件的文件名称为预设名称,且临时日志存储文件的字节数大于预设阈值时,则确定临时日志存储文件为有效文件。
方式二、在读取到临时日志存储文件中,添加有指示临时日志存储文件为有效文件的有效文件标识时,确定临时日志存储文件为有效文件。
上述方式一中,服务器可以解析接收到的临时日志存储文件,在解析到临时日志存储文件的文件名称为预设名称,且临时日志存储文件的字节数大于预设阈值时,则确定临时日志存储文件为有效文件。比如,在解析到临时日志存储文件的文件名称为logcat.txt,且该临时日志存储文件的字节数大于256B时,则确定该临时日志存储文件为有效文件。
在解析到临时日志存储文件的文件名称不是预设名称,或者临时日志存储文件的字节数小于或等于预设阈值时,则确定临时日志存储文件为无效文件。
上述方式二中,可以读取临时日志存储文件的标识信息,若读取到临时日志存储文件中,添加有有效文件标识,则确定该临时日志存储文件为有效文件;若读取到临时日志存储文件中,添加有无效文件标识,则确定该临时日志存储文件为无效文件。
一种可选实施方式中,在接收客户端发送的临时日志存储文件之前,还可以生成日志采集请求,并将日志采集请求发送给客户端。
这里,在需要获取日志信息时,可以在服务器上生成日志采集请求,并将日志采集请求发送给客户端,以便客户端可以在启动应用程序之后,在接收到日志采集请求时,抓取日志信息,并将日志信息存储在临时日志存储文件中。
上述实施方式中,通过判断接收到的临时日志存储文件是否为有效文件,并展示有效的临时日志存储文件,通过展示的临时日志存储文件可以确定该应用程序的运行状况或异常原因,以便完成对应用程序的分析检测。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与日志收集的方法对应的日志收集的装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述日志收集的方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
实施例二
基于同一发明构思,本公开还提供了一种日志收集的装置,参照图2所示,为本公开实施例提供的一种日志收集的装置的示意图,所述装置包括:创建模块201、获取模块202、发送模块203;其中,
创建模块201,用于为应用程序的主进程创建子进程;其中,所述子进程用于获取所述应用程序产生的日志信息;
获取模块202,用于通过所述子进程获取所述应用程序对应的日志信息,并将所述日志信息存储至临时日志存储文件;
发送模块203,用于通过所述主进程将所述临时日志存储文件发送给服务器。
一种可选的实施方式中,所述获取模块202,在通过所述子进程获取所述应用程序对应的日志信息时,用于:
获取所述应用程序当前运行的操作系统的系统版本信息,作为目标系统版本信息;
基于预设的系统版本信息与日志信息存储节点的对应关系表,查询与所述目标系统版本信息对应的目标日志信息存储节点;
从所述目标日志信息存储节点中获取所述应用程序对应的日志信息。
一种可选的实施方式中,所述获取模块202,在将所述日志信息存储至临时日志存储文件时,用于:
基于预设的存储格式和加密格式,对所述日志信息格式化处理并加密存储至所述临时日志存储文件中。
一种可选的实施方式中,在向所述服务器发送所述临时日志存储文件之前,所述装置还包括:判断模块204,用于:
当所述临时日志存储文件的字节数大于预设阈值时,为所述临时日志存储文件添加有效文件标识;
当所述临时日志存储文件的字节数小于或等于所述预设阈值时,为所述临时日志存储文件添加无效文件标识;
所述发送模块203,在通过所述主进程将所述临时日志存储文件发送给服务器时,用于:
通过所述主进程将添加有所述有效文件标识或所述无效文件标识的所述临时日志存储文件发送给所述服务器。
一种可选的实施方式中,所述创建模块201,在为应用程序的主进程创建子进程时,用于:
当应用程序发生异常时,为所述应用程序的主进程创建子进程;和/或,
当到达日志采集周期时间时,为所述应用程序的主进程创建子进程;和/或,
响应于服务器发送的日志采集请求,为所述应用程序的主进程创建子进程。
一种可选的实施方式中,当应用程序发生异常时,为所述应用程序的主进程创建子进程时,所述装置还包括:异常获取模块205,用于:
获取所述应用程序对应的异常信息,所述异常信息包括以下一种或多种:NativeCrash类型崩溃日志、java Crash类型崩溃日志、Anr栈信息;
通过所述主进程将所述应用程序对应的异常信息发送给服务器。
一种可选的实施方式中,所述获取模块202,在通过所述子进程获取所述应用程序对应的日志信息时,用于:
获取本地存储的目标库函数信息;
基于所述目标库函数信息,调用目标库函数获取所述应用程序对应的日志信息。
对应于图1中的日志收集的方法,本公开实施例还提供了一种电子设备300,如图3所示,为本公开实施例提供的电子设备300结构示意图,包括:
处理器31、存储器32、和总线33;存储器32用于存储执行指令,包括内存321和外部存储器322;这里的内存321也称内存储器,用于暂时存放处理器31中的运算数据,以及与硬盘等外部存储器322交换的数据,处理器31通过内存321与外部存储器322进行数据交换,当所述电子设备300运行时,所述处理器31与所述存储器32之间通过总线33通信,使得所述处理器31执行以下指令:
为应用程序的主进程创建子进程;其中,所述子进程用于获取所述应用程序运行过程产生的日志信息;
通过所述子进程获取所述应用程序对应的日志信息,并将所述日志信息存储至临时日志存储文件;
通过所述主进程将所述临时日志存储文件发送给服务器。
一种可能的实施方式中,所述处理器31执行的指令中,所述通过所述子进程获取所述应用程序对应的日志信息,包括:
获取所述应用程序当前运行的操作系统的系统版本信息,作为目标系统版本信息;
基于预设的系统版本信息与日志信息存储节点的对应关系表,查询与所述目标系统版本信息对应的目标日志信息存储节点;
从所述目标日志信息存储节点中获取所述应用程序对应的日志信息。
一种可能的实施方式中,所述处理器31执行的指令中,所述将所述日志信息存储至临时日志存储文件,包括:
基于预设的存储格式和加密格式,对所述日志信息格式化处理并加密存储至所述临时日志存储文件中。
一种可能的实施方式中,所述处理器31执行的指令中,在向所述服务器发送所述临时日志存储文件之前,所述方法还包括:
当所述临时日志存储文件的字节数大于预设阈值时,为所述临时日志存储文件添加有效文件标识;
当所述临时日志存储文件的字节数小于或等于所述预设阈值时,为所述临时日志存储文件添加无效文件标识;
通过所述主进程将所述临时日志存储文件发送给服务器,包括:
通过所述主进程将添加有所述有效文件标识或所述无效文件标识的所述临时日志存储文件发送给所述服务器。
一种可能的实施方式中,所述处理器31执行的指令中,所述为应用程序的主进程创建子进程,包括:
当应用程序发生异常时,为所述应用程序的主进程创建子进程;和/或,
当到达日志采集周期时间时,为所述应用程序的主进程创建子进程;和/或,
响应于服务器发送的日志采集请求,为所述应用程序的主进程创建子进程。
一种可能的实施方式中,所述处理器31执行的指令中,所述通过所述子进程获取所述应用程序对应的日志信息,包括:
获取本地存储的目标库函数信息;
基于所述目标库函数信息,调用目标库函数获取所述应用程序对应的日志信息。
一种可能的实施方式中,所述处理器31执行的指令中,为所述应用程序的主进程创建子进程时,所述方法还包括:
获取所述应用程序对应的异常信息,所述异常信息包括以下一种或多种:NativeCrash类型崩溃日志、java Crash类型崩溃日志、Anr栈信息;
通过所述主进程将所述应用程序对应的异常信息发送给服务器。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的日志收集的方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的日志收集的方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。