CN114116367B - 一种生成日志的方法及电子设备 - Google Patents
一种生成日志的方法及电子设备 Download PDFInfo
- Publication number
- CN114116367B CN114116367B CN202010869425.1A CN202010869425A CN114116367B CN 114116367 B CN114116367 B CN 114116367B CN 202010869425 A CN202010869425 A CN 202010869425A CN 114116367 B CN114116367 B CN 114116367B
- Authority
- CN
- China
- Prior art keywords
- log
- binary
- log data
- character string
- program
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3013—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is an embedded system, i.e. a combination of hardware and software dedicated to perform a certain function in mobile devices, printers, automotive or aircraft systems
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
- G06F11/3093—Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种生成日志的方法及电子设备,该方法通过建立原日志接口(log format)和索引化日志接口(log_index)之间的对应关系,在生成日志数据的过程中,通过数字索引替换静态字符串部分,从而输出结构化的日志数据。具体地,可以通过新建立的数字索引或者将字符串存储地址作为数字索引的方式输出结构化的日志数据。在每一条日志中,存储数字索引和对应的实际运行参数。该过程减少了嵌入式设备运行时代码对运行内存的占用,降低了输出的日志数据的大小,从而降低日志数据占用的存储空间。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种生成日志的方法及电子设备。
背景技术
目前,在嵌入式设备的应用场景中,系统日志可以用于监控设备软件的运行状态,及时记录软件运行过程中的问题点以及关键信息,方便开发人员后期定位以及解决问题。在嵌入式设备的应用场景中,日志数据主要存储在与中央处理器(central processingunit,CPU)连接的存储器中,例如随机存取存储器(random access memory,RAM)和只读存储器(read only memory,ROM)等。
由于嵌入式设备的RAM、ROM的存储空间有限,例如RAM一般为几十千字节(kilobyte,KB)到几百KB的大小,ROM一般为几十兆字节(Mbyte,MB),无法保存太多的日志数据。传统的日志数据为明文日志,明文日志的大小经常超过ROM的存储空间的大小,导致无法存储以及使用日志数据。因此,需要一种生成日志的方法,可以实现降低日志数据的大小,保证日志数据的正常存储以及使用。
发明内容
本申请提供一种生成日志的方法及电子设备,该方法减少了嵌入式设备运行时代码对运行内存的占用,降低了输出的日志数据的大小,从而降低日志数据占用的存储空间。
第一方面,提供了一种生成日志的方法,应用于包括嵌入式设备的系统中,该方法包括:获取日志服务的源代码,该源代码包括字符串部分和参数部分,该字符串部分用于确定访问该日志服务对应的第一日志接口;确定第一映射关系,该第一映射关系用于指示第一索引值和该第一日志接口之间的一一对应关系;根据该第一索引值和该参数部分生成该日志服务的目标代码,编译该目标代码,得到该日志服务的二进制运行程序,该二进制运行程序用于指示该嵌入式设备输出第一日志数据,该第一日志数据是结构化的二进制日志数据。
在本申请实施例中,在源代码预处理阶段引入“第一索引值”,通过建立第一索引值和所述字符串部分之间的一一对应关系,即“第一映射关系”,将通过第一索引值指示某个唯一的字符串。可选地,在本申请实施例中,“第一映射关系”还可以称为“数字字典”,换言之,通过数字作为索引值指示某个唯一的字符串,多个索引值和多个字符串之间的一一对应关系形成了“数字字典”。
上述实现过程,在源代码预处理阶段,将源代码中的字符串部分替换为对应的第一索引值,例如将format替换为索引值之后,接口函数发生了变化,可以认为由原日志接口变化为索引化日志接口,原日志接口“log()”替换为新的索引化日志接口,记作“log_index()”。因此,本申请实施例中的第一映射关系(或者称为“数字字典”)又可以理解为原日志接口和索引化日志接口之间的一一对应关系。
应理解,源代码中的字符串部分被第一索引值替换后,经过编译得到的二进制运行程序中不再存在静态字符串(format),可以降低二进制运行程序的大小。从而,进一步地,当嵌入式设备获取该二进制运行程序之后,存储该二进制运行程序到自身ROM,也会降低对ROM的占用。
可选地,结构化的二进制日志数据可以包括LV结构、TLV结构、结构体等不同的形式。在本申请实施例中,以二进制日志数据具有TLV结构为例进行介绍。
综上所述,区别于现有技术中输出的字符串式的日志数据结构,本申请实施例输出的日志数据中不再存在静态字符串,仅需要保存数字索引(index)和对应的实际运行参数即可,降低了输出的日志数据的大小,从而降低了嵌入式设备存储该日志数据时占用的存储空间。例如,嵌入式设备运行二进制运行程序时占用的RAM降低,且输出的结构化的日志数据占据的ROM也大大降低,从而可以降低对嵌入式设备的ROM、RAM等存储资源的占用。
结合第一方面,在第一方面的某些实现方式中,该方法还包括:该嵌入式设备获取该二进制运行程序;该嵌入式设备运行该二进制运行程序,生成该第一日志数据,该第一日志数据包括该第一索引值和该日志服务的实际运行参数。
以上可以理解为输出日志数据阶段的实现过程,由嵌入式设备执行,嵌入式设备可以根据源代码预处理阶段的所述日志服务的二进制运行程序,在实际运行过程中生成日志数据时,输出的第一日志数据中不再包括静态字符串(format),生成的日志数据仅包括数字索引和对应的实际运行参数,并将该日志数据进行缓存,降低了RAM的占用,进而大大降低了日志文件大小。
结合第一方面和上述实现方式,在第一方面的某些实现方式中,该嵌入式设备获取该二进制运行程序,包括:该嵌入式设备从服务器获取该二进制运行程序;或者该嵌入式设备预置该二进制运行程序。
一种可能的实现方式中,开发人员可以将编译后的二进制运行程序上传发布到服务器侧,嵌入式设备可以通过向服务器请求获取该二进制运行程序。应理解,本申请实施例对嵌入式设备通过服务器获取日志服务的过程不再赘述。
又一种可能的实现方式中,该二进制运行程序可以是嵌入式设备预置的。换言之,嵌入式设备在出厂时,系统就包括该二进制运行程序,具备记录并打印日志数据的功能,本申请实施例对此不作限定。
结合第一方面和上述实现方式,在第一方面的某些实现方式中,该第一索引值是随机数;或者多个该第一索引值是按照一定顺序排列的数字;或者该第一索引值是根据哈希算法确定的数值;或者该第一索引值是根据该字符串部分的存储地址确定的数值。
结合第一方面和上述实现方式,在第一方面的某些实现方式中,该系统还包括日志解析设备,该方法还包括:该日志解析设备获取该第一映射关系和该第一日志数据;该日志解析设备根据该第一日志数据,获取该第一索引值和该日志服务的实际运行参数;该日志解析设备根据该第一映射关系和该第一索引值,确定该第一日志接口;该日志解析设备根据该第一日志接口确定该日志服务的该字符串部分,根据该字符串部分和该实际运行参数还原该日志服务的明文日志。
应理解,以上处理过程可以理解为解析日志数据阶段,日志解析设备可以获取日志数据,从而根据日志数据中的内容分析、检测嵌入式设备软件的运行状态,分析软件运行过程中的问题点以及关键信息。因此,该阶段的过程可以由日志解析设备执行。
经过以上步骤,日志解析设备获取了第一日志数据,即获取了具有二进制数据结构(index,a)的日志数据,再根据第一映射关系中第一索引值index和字符串部分之间的一一对应关系,确定每一个index对应的字符串部分。再通过字符串部分替换日志数据中的第一索引值部分,还原具有(format 1,a)的字符串式结构的明文日志。
综上所述,本申请实施例中,通过建立原日志接口(log format)和索引化日志接口(log_index)之间的对应关系,将原日志接口(log format)替换为索引化日志接口(log_index)。具体地,将原日志接口(log format)中的静态字符串format替换为数字索引,从而嵌入式设备输出的日志从字符串式结构的文本输出变化为结构化的二进制数据输出。在每一条日志中,存储静态字符串的数字索引和对应的实际运行参数。
以上生成日志的过程,减少了嵌入式设备运行时代码对RAM的占用;同时,编译替换后的源代码得到的二进制运行程序中不再存在静态字符串(format),可以降低二进制运行程序的大小,降低了对嵌入式设备ROM资源的占用;此外,嵌入式设备输出的结构化的日志数据不再存在静态字符串,仅需要保存数字索引(index)和对应的实际运行参数即可,降低了输出的日志数据的大小,从而降低了嵌入式设备存储该日志数据时占用的存储空间。
当嵌入式设备的ROM、RAM等存储资源有限时,对于智能手表等轻量级的可穿戴设备,该生成日志的过程,可以不再通过删减业务功能或者关闭日志功能等方法,降低对嵌入式设备的ROM、RAM等存储资源的占用。对于几十KB到几百KB大小的RAM,或者几十MB的大小的ROM,可以节省较多的RAM、ROM资源,用于增加新业务功能。或者,当嵌入式设备的无线传输带宽有限,日志数据大小降低后,对带宽要求降低,可以保证在有限时间内完成日志数据的传输。
第二方面,提供了一种生成日志的方法,应用于包括嵌入式设备的系统中,该方法包括:获取日志服务的源代码,其中,该源代码包括字符串部分和参数部分,该字符串部分用于确定访问该日志服务对应的第一日志接口;编译该源代码,得到该日志服务的二进制运行程序,该二进制运行程序包括输出日志数据的框架,该日志数据的框架用于指示该嵌入式设备输出第一日志数据,该第一日志数据是结构化的二进制日志数据。
一种可能的实现方式中,编译所述源代码得到二进制运行程序中预置嵌入式设备输出结构化日志数据的能力。具体地,该能力具体体现为使能嵌入式设备可以输出结构化日志数据,该结构化的日志数据不包括静态字符串。
可选地,该预置嵌入式设备输出结构化日志数据的能力可以通过源代码中定义的日志框架函数来实现。应理解,日志服务的源代码中format 1和format 2为日志的源代码中的字符串部分,分别对应不同的存储地址,即内存地址,可以表示为二进制形式的内存地址偏移量。因此,该日志框架函数可以包括源代码中format对应的二进制形式的内存地址偏移量。
结合第二方面,在第二方面的某些实现方式中,该方法还包括:该嵌入式设备获取该二进制运行程序;该嵌入式设备运行该二进制运行程序确定该日志数据的框架,生成该第一日志数据,该第一日志数据包括第一索引值和该日志服务的实际运行参数。
上述实现过程中,不同于第一方面的实现过程,嵌入式设备得到的编译后的二进制运行程序中的字符串部分没有被替换,通过定义嵌入式设备生成日志数据的方式,指示嵌入式设备输出结构化的日志数据。
可以理解为,本申请实施例中将静态字符串的存储地址作为第一索引值,确定嵌入式设备生成的结构化的二进制日志数据,或者,可以理解为,根据二进制运行程序中的静态字符串的存储地址和静态字符串的对应关系,建立数字字典。指导嵌入式设备生成结构化的二进制日志数据。
区别于现有技术中输出的“(format 1,a)”的字符串式结构,本申请实施例输出的日志数据中不再存在静态字符串,仅需要保存数字索引(index)和对应的实际运行参数即可,降低了输出的日志数据的大小,从而降低了嵌入式设备存储该日志数据时占用的存储空间。例如,嵌入式设备运行二进制运行程序时占用的RAM降低,且输出的结构化的日志数据占据的ROM也大大降低,从而可以降低对嵌入式设备的ROM、RAM等存储资源的占用。
结合第二方面和上述实现方式,在第二方面的某些实现方式中,该嵌入式设备获取该二进制运行程序,包括:该嵌入式设备从服务器获取该二进制运行程序;或者该嵌入式设备预置该二进制运行程序。
结合第二方面和上述实现方式,在第二方面的某些实现方式中,该第一索引值是随机数;或者多个该第一索引值是按照一定顺序排列的数字;或者该第一索引值是根据哈希算法确定的数值;或者该第一索引值是根据该字符串部分的存储地址确定的数值。
结合第二方面和上述实现方式,在第二方面的某些实现方式中,该系统还包括日志解析设备,该方法还包括:该日志解析设备获取该第一日志数据和该源代码;该日志解析设备根据该第一日志数据,获取该第一索引值和该日志服务的实际运行参数;该日志解析设备根据该第一索引值,确定该第一日志接口;该日志解析设备根据该第一日志接口确定该日志服务的该字符串部分,根据该字符串部分和该实际运行参数还原该日志服务的明文日志。
综上所述,本申请实施例中,通过在日志服务的源代码中定义日志数据框架,记录每一条日志的字符串内存地址。该实现过程没有从源代码开始进行日志接口的索引化处理,而是将二进制运行程序中包含的字符串和字符串内存地址之间的对应关系,在嵌入式设备输出日志数据时,将原日志接口(log format)中的静态字符串format替换为字符串内存地址,从而嵌入式设备输出的日志从字符串式结构的文本输出变化为结构化的二进制数据输出。在每一条日志中,存储静态字符串的数字索引和对应的实际运行参数。
以上生成日志的过程,简化了整体处理流程;此外,嵌入式设备输出的结构化的日志数据不再存在静态字符串,仅需要保存数字索引(index)和对应的实际运行参数即可,降低了输出的日志数据的大小,从而降低了嵌入式设备存储该日志数据时占用的存储空间。
该生成日志的过程针对前述介绍的三种场景,当嵌入式设备的ROM、RAM等存储资源有限时,对于智能手表等轻量级的可穿戴设备,可以不再通过删减业务功能或者关闭日志功能等方法,降低对嵌入式设备的ROM、RAM等存储资源的占用。对于几十KB到几百KB大小的RAM,或者几十MB大小的ROM,可以节省较多的RAM、ROM资源,用于增加新业务功能。或者,当嵌入式设备的无线传输带宽有限,日志数据大小降低后,对带宽要求降低,可以保证在有限时间内完成日志数据的传输。
第三方面,提供了一种电子设备,包括:获取单元,用于获取日志服务的源代码,该源代码包括字符串部分和参数部分,该字符串部分用于确定访问该日志服务对应的第一日志接口;处理单元,用于确定第一映射关系,该第一映射关系用于指示第一索引值和该第一日志接口之间的一一对应关系;该处理单元,还用于根据该第一索引值和该参数部分生成该日志服务的目标代码,编译该目标代码,得到该日志服务的二进制运行程序,该二进制运行程序用于指示嵌入式设备输出第一日志数据,该第一日志数据是结构化的二进制日志数据。
可选地,该电子设备可以为开发者设备。
第四方面,提供了一种电子设备,包括:获取单元,用于获取二进制运行程序,该二进制运行程序用于指示该电子设备输出第一日志数据,该第一日志数据是结构化的二进制日志数据;处理单元,用于运行该二进制运行程序,生成该第一日志数据,该第一日志数据包括第一索引值和日志服务的实际运行参数。
结合第四方面,在第四方面的某些实现方式中,该二进制运行程序是该获取单元从服务器获取的;或者,该二进制运行程序是该电子设备预置的。
可选地,该电子设备可以为嵌入式设备,例如智能手表等轻量级的嵌入式设备。
第五方面,提供了一种电子设备,包括:获取单元,用于获取该第一映射关系和该第一日志数据;处理单元,用于:根据该第一日志数据,获取该第一索引值和该日志服务的实际运行参数;根据该第一映射关系和该第一索引值,确定该第一日志接口;根据该第一日志接口确定该日志服务的该字符串部分,根据该字符串部分和该实际运行参数还原该日志服务的明文日志。
结合第五方面,在第五方面的某些实现方式中,该第一索引值是随机数;或者多个该第一索引值是按照一定顺序排列的数字;或者该第一索引值是根据哈希算法确定的数值;或者该第一索引值是根据该字符串部分的存储地址确定的数值。
第六方面,提供了一种电子设备,包括:获取单元,用于获取日志服务的源代码,其中,该源代码包括字符串部分和参数部分,该字符串部分用于确定访问该日志服务对应的第一日志接口;处理单元,用于编译该源代码,得到该日志服务的二进制运行程序,该二进制运行程序包括输出日志数据的框架,该日志数据的框架用于指示该嵌入式设备输出第一日志数据,该第一日志数据是结构化的二进制日志数据。
结合第六方面,在第六方面的某些实现方式中,该第一索引值是随机数;或者多个该第一索引值是按照一定顺序排列的数字;或者该第一索引值是根据哈希算法确定的数值;或者该第一索引值是根据该字符串部分的存储地址确定的数值。
第七方面,提供了一种电子设备,包括:获取单元,用于获取该二进制运行程序;处理单元,用于运行该二进制运行程序确定该日志数据的框架,生成该第一日志数据,该第一日志数据包括第一索引值和该日志服务的实际运行参数。
结合第七方面,在第七方面的某些实现方式中,该二进制运行程序是该获取单元从服务器获取的;或者,该二进制运行程序是该电子设备预置的。
结合第七方面和上述实现方式,在第七方面的某些实现方式中,该第一索引值是随机数;或者多个该第一索引值是按照一定顺序排列的数字;或者该第一索引值是根据哈希算法确定的数值;或者该第一索引值是根据该字符串部分的存储地址确定的数值。
第八方面,提供了一种电子设备,包括:获取单元,用于获取该第一日志数据和该源代码;处理单元,用于:根据该第一日志数据,获取该第一索引值和该日志服务的实际运行参数;根据该第一索引值,确定该第一日志接口;根据该第一日志接口确定该日志服务的该字符串部分,根据该字符串部分和该实际运行参数还原该日志服务的明文日志。
结合第八方面,在第八方面的某些实现方式中,该第一索引值是随机数;或者多个该第一索引值是按照一定顺序排列的数字;或者该第一索引值是根据哈希算法确定的数值;或者该第一索引值是根据该字符串部分的存储地址确定的数值。
第九方面,本申请提供了一种嵌入式系统,该系统可以包括上述第三方面、第四方面、第五方面的任意一种可能的电子设备;或者,该系统可以包括上述第六方面、第七方面、第八方面的任意一种可能的电子设备。
第十方面,本申请提供了一种装置,该装置包含在电子设备中,该装置具有实现上述方面及上述方面的可能实现方式中电子设备行为的功能。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。例如,显示模块或单元、检测模块或单元、处理模块或单元等。
第十一方面,本申请提供了一种电子设备,包括:触摸显示屏,其中,触摸显示屏包括触敏表面和显示器;摄像头;一个或多个处理器;存储器;多个应用程序;以及一个或多个计算机程序。其中,一个或多个计算机程序被存储在存储器中,一个或多个计算机程序包括指令。当指令被电子设备执行时,使得电子设备执行上述任一方面任一项可能的实现中的生成日志的方法。
第十二方面,本申请提供了一种芯片,该芯片包括一个或多个处理器和一个或多个存储器。该一个或多个存储器与一个或多个处理器耦合,一个或多个存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,使得所述芯片执行上述任一方面任一项可能的实现中的生成日志的方法。
第十三方面,本申请提供了一种计算机可读存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行上述任一方面任一项可能的生成日志的方法。
第十四方面,本申请提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行上述任一方面任一项可能的生成日志的方法。
附图说明
图1是本申请实施例提供的一例系统架构图。
图2是本申请实施例提供的一例生成日志的过程的示意性交互图。
图3是本申请实施例提供的一例生成日志的过程的具体示意图。
图4是本申请实施例提供的又一例生成日志的过程的示意性交互图。
图5是本申请实施例提供的又一例生成日志的过程的具体示意图。
图6是本申请实施例提供的嵌入式设备的一种可能的组成示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个特征。
在介绍本申请实施例的生成日志的方法之前,先介绍一下几个相关的概念。
1、日志
日志,又可以称为“日志文件”、“系统日志”或“日志数据”。具体地,系统日志可以用于监控设备软件的运行状态,及时记录软件运行过程中的问题点以及关键信息。系统日志可以理解为文件系统,包括三个重要部分:目录区、参数区、日志区。
其中,目录区可以根据日期进行归类,记录当天的日志的存储地址、日志索引、日志大小,通过日志的目录可以获取整个日志文件的概况。示例性的,系统日志目录可以实现如下:
LOG_ID:按日期分类,该ID用于查询对应日期的日志数据,可以从1开始计数;
LOG_DATE:系统日志的存储日期;
LOG_ADDR:系统日志存储的外部FLASH地址;
LOG_OFFSET:系统日志存储的内存地址偏移量(各日期日志数据的大小,单位:字节)。
在查询系统日志的过程中,可以通过指令查询到整个日志目录区的概况,打印系统日志的目录区信息,可实现通过指令查询到目录区信息,此处不再赘述。
参数区可以用于存储记录日志写位置、目录项个数、写状态等参数。参数区应当保证日志数据的正确性,应加入参数校验存储,定义校验结构体。日志区是主要的存储区,用于记录系统的日志数据。
在本申请实施例中,可以将日志的参数区和日志区统一理解为存储系统日志的相关参数的区域。每一条系统日志,可以包括多个字符串(format)和相关参数,记作下表1所示:
表1
上述示例可以理解为日志的源代码,其中,format 1和format 2为日志的源代码中的字符串部分,a、b为日志的源代码中输出的相关参数。应理解,字符串(format)和相关参数都需要占用部分内存。
在日志的解析过程中,“log(format 1)”可以定义为日志接口,即通过查询该接口以访问日志数据。
2、现有的降低日志数据的方法
如背景技术所介绍,由于嵌入式设备的RAM、ROM的存储空间有限,无法保存太多的日志数据,因此,现有的方案中可以通过优化业务代码来降低日志数据的大小。具体可以包括以下两种实现方式:
一种实现方式中,可以对生成的日志文件进行压缩。该方案需要先生成日志的原始文件,然后再对日志的原始文件进行压缩。该方案主要在非嵌入式平台使用较多,且该过程中需要占用额外的存储空间先保存日志的原始文件,然后才能对该原始文件进行压缩。此外,在压缩原始文件的过程中,可以通过压缩算法来实现,常见的压缩算法需要额外占用系统的处理性能,且压缩比越高,导致系统处理性能的损耗越大。因此,该过程会影响系统的性能,且需要占用额外的存储空间先保存日志的原始文件,降低日志数据的大小的效果不理想。
另一种实现方式中,日志数据在被写入文件系统之前,可以进行流式压缩,即在内存中对当前缓存数据进行压缩。具体地,在该实现方式中,需要缓存更多的日志数据,并将重复的日志数据进行标记,删除不必要的日志打印,减少日志打印的数据量,从而降低日志数据的大小,以降低RAM和ROM的占用。但是,该实现过程需要占用更大的RAM作为缓存,缓存足够的日志数据后才可以标记出重复的日志数据,否则无法实现压缩日志数据的效果。此外,流式压缩的方式依然会额外占用系统的处理性能。
应理解,嵌入式设备可以包括多种存储器件。本申请实施例中,针对嵌入式设备,ROM可以包括用于存储日志数据的外部存储器件等,本申请实施例以嵌入式设备的存储器件包括RAM、ROM为例,后续不再赘述。
因此,本申请实施例将提供一种生成日志的方法,可以实现降低日志数据的大小,优化系统性能。应理解,该生成日志的方法可以应用于单独的嵌入式设备,或者包含该嵌入式设备的系统中,也可是单独的应用程序,该应用程序可实现本申请生成日志的方法,本申请实施例对此不作限定。
图1是本申请实施例提供的一例系统架构图。下面结合系统架构100介绍本申请实施例提供的生成日志的方法。如图1所示,系统架构100可以理解为嵌入式系统,该系统可以包括开发者设备10、嵌入式设备20和日志解析设备30。
其中,开发者设备10可以用于日志开发人员开发日志服务的源代码,源代码可以包括如上表1所示的代码等,源代码还可以包括其他的用于定义日志框架的代码模块,此处不再赘述。此外,开发者设备10还可以具有源代码的编译等功能,源代码经过编译后可以生成二进制运行程序,将该二进制运行程序运行在嵌入式设备上,嵌入式设备就可以执行生成日志数据、打印日志等功能。应理解,本申请实施例对开发者设备10的体现形式不作限定。
嵌入式设备20可以由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成,它是集软硬件于一体的可独立工作的“器件”。其中,嵌入式处理器可以由一个单片机或微控制器(micro control unit,MCU)组成;相关支撑硬件可以包括显示卡、ROM和RAM等存储介质、通信模块等;嵌入式软件可以包括与硬件相关的底层软件、操作系统、图形界面、通信协议、数据库系统、标准化浏览器和应用软件等。嵌入式系统有别于一般的计算机处理系统,它不具备像硬盘那样大容量的存储介质,而大多使用闪存(flash)作为存储介质。
应理解,对于嵌入式设备20,除了包括上述介绍的嵌入式处理器、相关支撑硬件和嵌入式软件系统之外,还可以包括其他更多的部件。例如,嵌入式设备还可以包括充电管理模块,电源管理模块,电池,天线,移动通信模块,无线通信模块,音频模块,扬声器,受话器,麦克风,耳机接口,传感器模块,按键,马达,指示器,摄像头,显示屏,以及用户标识模块(subscriber identification module,SIM)卡接口等的一种或者多种。其中,传感器模块可以包括压力传感器,陀螺仪传感器,气压传感器,磁传感器,加速度传感器,距离传感器,接近光传感器,指纹传感器,温度传感器,触摸传感器,环境光传感器,骨传导传感器等。本申请实施例对嵌入式设备20包括的部件的数量和种类不作任何限制。
示例性的,嵌入式设备20可以是手机、平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personaldigital assistant,PDA)等。在本申请实施例中,嵌入式设备20可以是智能手表等轻量级的可穿戴设备,应理解,本申请实施例对嵌入式设备20的具体类型不作任何限制。
日志解析设备30还可以称为“日志分析设备”、“日志处理设备”或者“日志管理设备”等,开发人员可以通过该日志解析设备30全面收集、管理和分析系统日志,通过统一的控制台进行实时可视化的呈现,进而监控设备软件的运行状态,分析软件运行过程中的问题点以及关键信息。可选地,开发人员从服务器下载日志解析工具等,那么安装运行该日志解析工具的设备就可以称为日志解析设备30,本申请实施例对日志解析设备30的体现形式不作任何限制。
应理解,嵌入式设备20和日志解析设备30可以对应不同的物理设备,或者嵌入式设备20和日志解析设备30可以作为同一个设备的不同模块集成在同一个物理设备上,本申请实施例对此不作限定。
还应理解,开发者设备10和日志解析设备30可以对应不同的物理设备,或者开发者设备10和日志解析设备30可以作为同一个设备的不同模块集成在同一个物理设备上,例如,日志服务的前端开发人员即通过开发者设备10开发源代码,也可以通过相同的设备解析日志文件,监控嵌入式设备20的运行状态等,本申请实施例对此不作限定。
还应理解,开发者设备10、嵌入式设备20和日志解析设备30还可以包括ROM、RAM等存储器件,以及其他更多的部件或模块,为了简便,图1中没有示出。
示例性的,在本申请实施例中,嵌入式设备20可以是智能手表等轻量级的可穿戴设备,日志解析设备30可以是支持开发人员进行日志处理的具有PC工具的操作平台。
例如,一种可能的使用场景中,用户使用智能手表等轻量级的可穿戴设备,用户的智能手表的存储资源有限,可以通过连接手机,将智能手表使用过程中的系统日志经由手机上传到服务器侧。开发人员可以通过从服务器侧获取系统日志,监控智能手表的运行状态,应理解,该过程可以为测试阶段,开发人员从服务器侧获取系统日志的过程满足用户隐私服务等,本申请实施例对此不再赘述。
应理解,开发者设备10、嵌入式设备20和日志解析设备30之间数据或信息的交互的方式可以是通过建立连接的方式,或者通过服务器、云端等方式进行数据共享。示例性的,开发者设备10编译日志服务的源代码之后,生成的二进制运行程序上传到服务器,嵌入式设备20可以从服务器获取该二进制运行程序。又例如在测试阶段,嵌入式设备20在满足用户隐私的情况下,可以将生成的日志上传到服务器,开发人员可以通过日志解析设备30从服务器侧获取该日志,并解析该日志,进而监控嵌入式设备的运行状态,本申请实施例对此不作限定。
还应理解,本申请实施例示意的结构并不构成对系统架构100的具体限定。在本申请另一些实施例中,系统架构100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
在本申请实施例中,开发者设备10可以获取日志的源代码,并对日志的源代码进行预处理,编译日志的源代码得到二进制日志文件;由嵌入式设备20根据该二进制日志文件生成系统日志,并存储该系统日志。结合该过程,本申请实施例提供的生成日志的方法可以应用于以下可能的场景:
场景一
嵌入式设备20的ROM、RAM等存储资源有限,对于智能手表等轻量级的可穿戴设备,RAM一般为几十KB到几百KB的大小,RAM一般为几十MB,日志解析设备30编译日志的源代码得到的二进制日志文件可能会超级大导致无法安装。
场景二
嵌入式设备20的ROM、RAM等存储资源在当前已经被用尽,但是业务上还需要增加新功能,需要在不增加存储资源的物理成本的情况下上线新业务。
场景三
嵌入式设备20的无线传输带宽有限,当前的日志数据对带宽要求太高,难以在有限时间内完成日志数据的传输。
例如,假设一个嵌入式设备包括3万条日志,一条日志的format串部分可能平均包括48个字节,那么存储到ROM至少占用1406KB,且传输日志数据的过程中需要更大的传输带宽,以蓝牙传输为例,当带宽无法满足条件的情况下,如何实现嵌入式设备20的日志数据,保证日志数据的正常传输。
针对以上三种可能的场景,下面结合图1介绍的系统架构,以包括开发者设备10、嵌入式设备20和日志解析设备30的系统为例,详细介绍本申请实施例将提供的生成日志的方法。
图2是本申请提供的一例生成日志的过程的示意性交互图,如图2所示,该方法200具体可以分为三个阶段,具体包括源代码预处理阶段、输出日志数据阶段和解析日志数据阶段。下面将具体针对三个不同阶段进行介绍。
阶段一:源代码预处理阶段
应理解,源代码预处理阶段可以理解为由日志开发人员在开发者设备10上开发日志服务的源代码的过程。本申请实施例中所说的“日志服务”可以使能某个设备记录并打印日志数据,将开发人员开发的日志服务的源代码经过编译等处理之后,可以得到对应的运行程序,即“二进制运行程序”。示例性的,嵌入式设备10获取了日志服务的程序之后,可以使能嵌入式设备10记录并打印日志数据,并上传日志数据到服务器侧。该源代码预处理阶段主要包括以下步骤:
201,获取日志服务的源代码,所述源代码包括字符串部分和参数部分。
202,确定第一映射关系,所述第一映射关系用于指示第一索引值和所述字符串部分之间的对应关系。
示例性的,如表1示出的代码可以理解为日志服务的源代码,其中,format 1和format2为日志的源代码中的字符串部分,a、b为日志的源代码中输出的相关参数。
应理解,format 1和format 2对应的不同的字符串,且对应不同的存储地址,或者称为内存地址。通过函数“log()”定义原日志接口,通过查询该原日志接口可以访问存储的日志数据。
还应理解,a、b为嵌入式设备在实际使用过程中输出的相关参数,在源代码中,a、b可以不具有实际的参数值,嵌入式设备10生成日志数据的过程中,可以将实际运行参数填充在相应的位置。那么,嵌入式设备10输出的日志数据可以理解为包括字符串部分和实际运行参数,例如(format 1,a),这种日志数据的结构可以称为“字符串式结构”。
在本申请实施例中,在源代码预处理阶段引入“第一索引值”,通过建立第一索引值和所述字符串部分之间的一一对应关系,即“第一映射关系”,将通过第一索引值指示某个唯一的字符串。可选地,在本申请实施例中,“第一映射关系”还可以称为“数字字典”,换言之,通过数字作为索引值指示某个唯一的字符串,多个索引值和多个字符串之间的一一对应关系形成了“数字字典”。
一种可能的实现方式中,该第一索引值是随机数。例如,表2是本申请实施例提供的一例第一索引值和字符串部分之间的对应关系示例。如表2所示,每一个字符串对应一个内存地址,且对应一个索引值。该索引值可以是随机数。
表2
字符串 | 存储地址 | 索引值 |
format 1 | 408734 | 1 |
format 2 | 408744 | 2 |
format 3 | 408754 | 3 |
…… | …… | …… |
又一种可能的实现方式中,多个所述第一索引值是按照一定顺序排列的数字。例如表2中的索引值1、2、3等按照数字从小到大的顺序排列的数字;或者索引值还可以是某些从大到小的顺序排列的数字;或者按照等差、等比等规律排列的数字,此处不再一一举例。
另一种可能的实现方式中,第一索引值是根据哈希算法(hash)确定的,具体的哈希算法请参照现有技术,本申请实施例对此不再赘述。
再一种可能的实现方式中,第一索引值是根据所述字符串部分的存储地址确定的。示例性的,表3是本申请实施例提供的又一例第一索引值和字符串部分之间的对应关系示例。如表3所示,将每一个字符串对应的内存地址确定为第一索引值。应理解,字符串的存储地址为固定的,可以用内存地址偏移量进行表示,那么可以将内存地址偏移量当做第一索引值,建立第一映射关系。
表3
字符串 | 存储地址 | 第一索引值 |
format 1 | 408734 | 408734 |
format 2 | 408744 | 408734 |
format 3 | 408754 | 408734 |
…… | …… | …… |
203,通过第一索引值替换所述字符串部分,得到更新后的所述日志服务的目标代码。
204,编译所述目标代码,得到二进制运行程序。
建立数字索引值和字符串部分之间的一一对应关系之后,将源代码中的字符串部分替换为对应的第一索引值,换言之,将源代码中的原日志接口“log()”替换为新的索引化日志接口,记作“log_index()”,其中,index为第一索引值,替换了原有的静态字符串。示例性的,对于表1中的源代码,修改为下表4所示。
表4
应理解,当将源代码中的字符串部分替换为对应的第一索引值,例如将format 1替换为索引值1之后,接口函数发生了变化,可以认为由原日志接口变化为索引化日志接口,原日志接口“log()”替换为新的索引化日志接口,记作“log_index()”。因此,第一映射关系(或者数字字典)又可以理解为原日志接口和索引化日志接口之间的一一对应关系。
相应地,将原日志接口“log()”的调用替换为索引化日志接口“log_index()”的调用,format部分替换为对应数字索引作为新接口参数,替换后的源代码不再存在format静态字符串。
通过以上步骤203,替换了源代码中的字符串部分,得到更新后的日志服务的目标代码,编译该日志服务的目标代码之后得到二进制运行程序。
图3是本申请提供的一例生成日志的过程的具体示意图,图3更详细的展示了该生成日志的过程。具体地,图2中源代码预处理阶段的步骤201-204的处理过程可以对应于图3中的步骤1-步骤4,该过程可以在开发者设备10上执行,具体包括:
步骤1,获取源代码;
步骤2,根据源代码中的字符串部分生成数字字典,建立字符串部分和数字索引的对应关系;
步骤3,将源代码中的原日志接口“log()”替换为索引化日志接口“log_index()”,更新源代码为目标代码,即format部分替换为对应数字索引作为新接口参数,替换后的源代码不再存在format静态字符串;
步骤4,编译更新后的目标代码。
通过上述源代码预处理阶段的步骤201-步骤204的处理过程,编译后的二进制运行程序中不再存在静态字符串(format),可以降低二进制运行程序的大小。从而,进一步地,当嵌入式设备20获取该二进制运行程序之后,存储该二进制运行程序到自身ROM,也会降低对ROM的占用。
阶段二:输出日志数据阶段
应理解,在输出日志数据阶段,嵌入式设备20可以获取日志服务,从而在实际运行过程中,可以记录并打印日志数据,并上传日志数据到服务器侧。因此,该阶段二的过程可以由嵌入式设备20执行。
205,嵌入式设备20获取二进制运行程序。
206,运行所述二进制运行程序。
一种可能的实现方式中,经过阶段一的步骤201-204的过程,开发人员可以将编译后的二进制运行程序上传发布到服务器侧,嵌入式设备20可以通过向服务器请求获取该二进制运行程序。应理解,本申请实施例对嵌入式设备20通过服务器获取日志服务的过程不再赘述。
又一种可能的实现方式中,该二进制运行程序可以是嵌入式设备20预置的。换言之,嵌入式设备20在出厂时,系统就包括该二进制运行程序,具备记录并打印日志数据的功能,本申请实施例对此不作限定。
207,嵌入式设备20获取实际运行参数,根据第一索引值和所述实际运行参数,输出第一日志数据。
208,存储所述第一日志数据。
应理解,运行从阶段一获取的二进制运行程序之后,嵌入式设备20在输出日志数据的过程中,不再缓存静态字符串(format),只需要缓存数字索引和对应的实际运行参数。换言之,嵌入式设备20可以以(index,a)的二进制数据结构输出日志数据。因此,在本申请实施例中,“第一日志数据”可以理解为结构化的日志数据,具有二进制的结构化数据格式。
具体地,嵌入式设备20可以通过PC工具扫描并调用所有的索引化日志接口,根据“数字索引+实际运行参数”的格式,生成结构化的日志数据,该输出的日志数据中不再存在静态字符串。
区别于现有技术中输出的“(format 1,a)”的字符串式结构,本申请实施例输出的日志数据中不再存在静态字符串,仅需要保存数字索引(index)和对应的实际运行参数即可,降低了输出的日志数据的大小,从而降低了嵌入式设备20存储该日志数据时占用的存储空间。例如,嵌入式设备20运行二进制运行程序时占用的RAM降低,且输出的结构化的日志数据占据的ROM也大大降低,从而可以降低对嵌入式设备20的ROM、RAM等存储资源的占用。
一种可能的实现方式中,嵌入式设备20输出的结构化的日志数据为TLV(tag,length,value)结构的二进制数据,本申请实施例对二进制数据的结构形式不作限定。
应理解,结构化的二进制日志数据可以包括LV结构、TLV结构、结构体等不同的形式,在本申请实施例中,以二进制日志数据具有TLV结构为例进行介绍。
具体地,图2中输出日志数据阶段的步骤205-208的处理过程可以对应于图3中的步骤4-步骤6,该过程可以在嵌入式设备20上执行,具体包括:
步骤4,获取编译的二进制运行程序;
步骤5,运行该二进制运行程序并输出结构化的日志数据;
步骤6,存储该结构化的日志数据。
通过上述介绍的输出日志数据阶段的过程,嵌入式设备20根据源代码预处理阶段的所述日志服务的二进制运行程序,在实际运行过程中生成日志数据时,输出的第一日志数据中不再包括静态字符串(format),生成的日志数据仅包括数字索引和对应的实际运行参数,并将该日志数据进行缓存,降低了RAM的占用,进而大大降低了日志文件大小。
阶段三:解析日志数据阶段
应理解,在解析日志数据阶段,日志解析设备30可以获取日志数据,从而根据日志数据中的内容分析、检测嵌入式设备20软件的运行状态,分析软件运行过程中的问题点以及关键信息。因此,该阶段三的过程可以由日志解析设备30执行。
应理解,日志解析设备30可以是支持开发人员进行日志处理的具有PC工具的操作平台,具有还原明文日志的能力。
209,日志解析设备30获取所述第一日志数据。
210,日志解析设备30根据所述第一日志数据,确定第一索引值和所述实际运行参数。
应理解,对于嵌入式设备20的测试阶段,嵌入式设备20可以将运行过程中记录的日志数据上传到服务器,开发人员可以从服务器侧请求获取日志数据,以分析并监测该嵌入式设备20的运行状态,其中,系统日志数据的上传和获取的过程满足用户隐私服务,本申请实施例对此不再赘述。
211,日志解析设备30获取所述第一映射关系。
212,日志解析设备30根据所述第一映射关系和第一索引值,确定所述字符串部分。
一种可能的实现方式中,日志解析设备30可以从服务器侧获取该第一映射关系。示例性的,在源代码预处理阶段,开发人员将包含第一映射关系的信息上传到服务器,日志解析设备30可以从服务器侧获取包含该第一映射关系的信息。可选地,包含第一映射关系的信息可以承载在更新后的所述日志服务的目标代码中,本申请实施例对此不作限定。
又一种可能的实现方式中,日志解析设备30可以向服务器请求下载PC工具,该第一映射关系的信息可以包含在PC工具内,本申请实施例对此不再赘述。
213,日志解析设备30根据所述字符串部分和所述实际运行参数,还原明文日志。
应理解,在该过程中具体实现过程中,本申请实施例对多个步骤的先后顺序不作限定,例如,步骤209、210可以发生在步骤211、212之前、之后,或者同时执行该过程,不同的执行顺序均落入本申请的保护范围之内,此处一一赘述。
经过以上步骤,日志解析设备30获取了第一日志数据,即获取了具有二进制数据结构(index,a)的日志数据,再根据第一映射关系中第一索引值index和字符串部分之间的一一对应关系,确定每一个index对应的字符串部分。再通过字符串部分替换日志数据中的第一索引值部分,还原具有(format 1,a)的字符串式结构的明文日志。
具体地,图2中解析日志数据阶段的步骤209-213的处理过程可以对应于图3中的步骤6-步骤8,该过程可以在日志解析设备30上执行,具体包括:
步骤6,日志解析设备30获取结构化的日志数据;
步骤7,日志解析设备30获取字符串部分和数字索引的对应关系——数字字典;
步骤8,日志解析设备30还原该结构化的日志数据为明文日志。
通过上述介绍的解析日志数据阶段的过程,将嵌入式设备20生成的结构化的日志文件导出后,通过工具在PC端使用对应的数字字典对日志文件进行还原,生成对应明文日志文件,该过程不影响嵌入式设备20的处理性能。
综上所述,本申请实施例中,通过建立原日志接口(log format)和索引化日志接口(log_index)之间的对应关系,将原日志接口(log format)替换为索引化日志接口(log_index)。具体地,将原日志接口(log format)中的静态字符串format替换为数字索引,从而嵌入式设备输出的日志从字符串式结构的文本输出变化为结构化的二进制数据输出。在每一条日志中,存储静态字符串的数字索引和对应的实际运行参数。
以上生成日志的过程,减少了嵌入式设备运行时代码对RAM的占用;同时,编译替换后的源代码得到的二进制运行程序中不再存在静态字符串(format),可以降低二进制运行程序的大小,降低了对嵌入式设备ROM资源的占用;此外,嵌入式设备输出的结构化的日志数据不再存在静态字符串,仅需要保存数字索引(index)和对应的实际运行参数即可,降低了输出的日志数据的大小,从而降低了嵌入式设备20存储该日志数据时占用的存储空间。
该生成日志的过程针对前述介绍的三种场景,当嵌入式设备20的ROM、RAM等存储资源有限时,对于智能手表等轻量级的可穿戴设备,可以不再通过删减业务功能或者关闭日志功能等方法,降低对嵌入式设备20的ROM、RAM等存储资源的占用。对于几十KB到几百KB大小的RAM,或者几十MB的ROM,可以节省较多的RAM、ROM资源,用于增加新业务功能。或者,当嵌入式设备的无线传输带宽有限,日志数据大小降低后,对带宽要求降低,可以保证在有限时间内完成日志数据的传输。
图4是本申请提供的又一例生成日志的过程的示意性交互图,如图4所示,该方法400也可以分为源代码预处理阶段、输出日志数据阶段和解析日志数据阶段。下面将具体针对三个不同阶段进行介绍。
阶段一:源代码预处理阶段
401,获取日志服务的源代码,所述源代码包括字符串部分和参数部分。
402,编译所述源代码,得到二进制运行程序,所述二进制运行程序中预置嵌入式设备输出结构化日志数据的能力。
应理解,方法400中的源代码预处理阶段不同于方法200中的源代码预处理阶段,在该方法400中的源代码预处理阶段,日志开发人员在开发者设备10上使用日志接口的源代码,该源代码不需要做修改。
一种可能的实现方式中,编译所述源代码得到二进制运行程序中预置嵌入式设备输出结构化日志数据的能力。具体地,该能力具体体现为使能嵌入式设备20可以输出结构化日志数据,该结构化的日志数据不包括静态字符串。
可选地,该预置嵌入式设备输出结构化日志数据的能力可以通过源代码中定义的日志框架函数来实现。应理解,日志服务的源代码中format 1和format 2为日志的源代码中的字符串部分,分别对应不同的存储地址,即内存地址,可以表示为二进制形式的内存地址偏移量。因此,该日志框架函数可以包括源代码中format对应的二进制形式的内存地址偏移量。
图5是本申请提供的又一例生成日志的过程的具体示意图,图5更详细的展示了该生成日志的过程。具体地,图4中源代码预处理阶段的步骤401-402的处理过程可以对应于图5中的步骤1-步骤2,该过程可以在开发者设备10上执行,具体包括:
步骤1,获取源代码;
步骤2,编译源代码,得到二进制运行程序,修改源代码中的日志框架,该日志框架用于定义输出的日志为结构化日志数据。
阶段二:输出日志数据阶段
应理解,在输出日志数据阶段,嵌入式设备20可以获取日志服务,从而在实际运行过程中,可以记录并打印日志数据,并上传日志数据到服务器侧。因此,该阶段二的过程可以由嵌入式设备20执行。
403,嵌入式设备20获取二进制运行程序。
404,运行所述二进制运行程序。
一种可能的实现方式中,经过阶段一的过程,开发人员可以将编译后的二进制运行程序上传发布到服务器侧,嵌入式设备20可以通过向服务器请求获取该二进制运行程序。应理解,本申请实施例对嵌入式设备20通过服务器获取日志服务的过程不再赘述。
又一种可能的实现方式中,该二进制运行程序可以是嵌入式设备20预置的。换言之,嵌入式设备20在出厂时,系统就包括该二进制运行程序,具备记录并打印日志数据的功能,本申请实施例对此不作限定。
405,嵌入式设备20获取实际运行参数,根据字符串部分的存储地址和所述实际运行参数,输出第一日志数据。
406,存储所述第一日志数据。
应理解,嵌入式设备20根据源代码中定义的日志框架函数,确定输出的日志数据为结构化日志数据。
一种可能的实现方式中,该日志框架函数可以通过format对应的二进制形式的内存地址偏移量指示该format,即在输出日志数据时将format部分替换为该format的内存地址偏移量。
具体地,嵌入式设备20运行从阶段一获取的二进制运行程序之后,嵌入式设备20在输出日志数据的过程中,不再缓存静态字符串(format),只需要缓存静态字符串的存储地址和对应的实际运行参数。换言之,嵌入式设备20可以以“静态字符串的存储地址+a”的二进制数据结构输出日志数据。
与方法400不同的是,嵌入式设备20得到的编译后的二进制运行程序中的字符串部分没有被替换,通过定义嵌入式设备20生成日志数据的方式,指示嵌入式设备20输出结构化的日志数据。
可以理解为,本申请实施例中将静态字符串的存储地址作为第一索引值,确定嵌入式设备20生成的结构化的二进制日志数据,或者,可以理解为,根据二进制运行程序中的静态字符串的存储地址和静态字符串的对应关系,建立数字字典。指导嵌入式设备20生成结构化的二进制日志数据。
应理解,结构化的二进制日志数据可以包括LV结构、TLV结构、结构体等不同的形式,在本申请实施例中,以二进制日志数据具有TLV结构为例进行介绍。
区别于现有技术中输出的“(format 1,a)”的字符串式结构,本申请实施例输出的日志数据中不再存在静态字符串,仅需要保存数字索引(index)和对应的实际运行参数即可,降低了输出的日志数据的大小,从而降低了嵌入式设备20存储该日志数据时占用的存储空间。例如,嵌入式设备20运行二进制运行程序时占用的RAM降低,且输出的结构化的日志数据占据的ROM也大大降低,从而可以降低对嵌入式设备20的ROM、RAM等存储资源的占用。
具体地,图4中输出日志数据阶段的步骤203-406的处理过程可以对应于图5中的步骤2-步骤4,该过程可以在嵌入式设备20上执行,具体包括:
步骤2,获取编译的二进制运行程序,确定输出的日志数据的结构;
步骤3,运行该二进制运行程序并输出结构化的二进制日志数据,例如TVL结构的二进制日志数据;
步骤4,存储该结构化的二进制日志数据。
通过上述介绍的输出日志数据阶段的过程,嵌入式设备20根据源代码预处理阶段的所述日志服务的二进制运行程序,在实际运行过程中生成日志数据时,输出的第一日志数据中不再包括静态字符串(format),生成的日志数据仅包括数字索引和对应的实际运行参数,并将该日志数据进行缓存,降低了RAM的占用,进而大大降低了日志文件大小。
阶段三:解析日志数据阶段
407,日志解析设备30获取所述第一日志数据。
408,日志解析设备30根据所述第一日志数据,字符串部分的存储地址和所述实际运行参数。
409,日志解析设备30获取所述二进制运行程序。
410,日志解析设备30根据所述二进制运行程序和字符串部分的存储地址,确定所述字符串部分。
一种可能的实现方式中,日志解析设备30可以从服务器侧获取该二进制运行程序。示例性的,在源代码预处理阶段,开发人员将包含该二进制运行程序上传到服务器,日志解析设备30可以从服务器侧获取该二进制运行程序。
又一种可能的实现方式中,日志解析设备30可以向服务器请求下载PC工具,该该二进制运行程序可以包含在PC工具内,本申请实施例对此不再赘述。
411,日志解析设备30根据所述字符串部分和实际运行参数,还原明文日志。
示例性的,二进制运行程序在嵌入式设备20的运行过程中,生成TLV结构的日志数据,该TLV结构的日志数据仅保存字符串内存地址。导出日志文件到日志解析设备30之后,PC工具使用嵌入式设备20的二进制运行程序做数字字典,通过记录的字符串内存地址查找到对应字符串,进而通过字符串替换日志数据中的字符串内存地址,来对日志文件进行还原,生成对应明文日志。
具体地,图4中解析日志数据阶段的步骤407-411的处理过程可以对应于图5中的步骤4-步骤6,该过程可以在日志解析设备30上执行,具体包括:
步骤4,日志解析设备30获取结构化的日志数据;
步骤5,日志解析设备30获取二进制运行程序,通过日志数据中记录的内存地址,在二进制运行程序中查询字符串部分。具体地,通过记录的内存地址和地址偏移量的方式查询字符串部分。
步骤6,日志解析设备30还原该结构化的日志数据为明文日志。
通过上述介绍的解析日志数据阶段的过程,将嵌入式设备20生成的结构化的日志文件导出后,通过工具在PC端使用对应的数字字典对日志文件进行还原,生成对应明文日志文件,该过程不影响嵌入式设备20的处理性能。
应理解,方法400和方法200中涉及部分相同的实现过程,可以具体参考方法200中的相关描述,本申请实施例对此不再赘述。
还应理解,在该过程中具体实现过程中,本申请实施例对多个步骤的先后顺序不作限定,例如,步骤407、408可以发生在步骤409、410之前、之后,或者同时执行该过程,不同的执行顺序均落入本申请的保护范围之内,此处一一赘述。
综上所述,本申请实施例中,通过在日志服务的源代码中定义日志数据框架,记录每一条日志的字符串内存地址。该实现过程没有从源代码开始进行日志接口的索引化处理,而是将二进制运行程序中包含的字符串和字符串内存地址之间的对应关系,在嵌入式设备输出日志数据时,将原日志接口(log format)中的静态字符串format替换为字符串内存地址,从而嵌入式设备输出的日志从字符串式结构的文本输出变化为结构化的二进制数据输出。在每一条日志中,存储静态字符串的数字索引和对应的实际运行参数。
以上生成日志的过程,简化了整体处理流程;此外,嵌入式设备输出的结构化的日志数据不再存在静态字符串,仅需要保存数字索引(index)和对应的实际运行参数即可,降低了输出的日志数据的大小,从而降低了嵌入式设备存储该日志数据时占用的存储空间。
该生成日志的过程针对前述介绍的三种场景,当嵌入式设备20的ROM、RAM等存储资源有限时,对于智能手表等轻量级的可穿戴设备,可以不再通过删减业务功能或者关闭日志功能等方法,降低对嵌入式设备20的ROM、RAM等存储资源的占用。对于几十KB到几百KB大小的RAM,或者几十MB大小的ROM,可以节省较多的RAM、ROM资源,用于增加新业务功能。或者,当嵌入式设备的无线传输带宽有限,日志数据大小降低后,对带宽要求降低,可以保证在有限时间内完成日志数据的传输。
可以理解的是,开发者设备、嵌入式设备和日志解析设备为了实现上述功能,其包含了执行各个功能相应的硬件和/或软件模块。结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以结合实施例对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
以嵌入式设备20为例,本实施例可以根据上述方法示例对嵌入式设备20进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块可以采用硬件的形式实现。需要说明的是,本实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图6示出了上述实施例中涉及的嵌入式设备20的一种可能的组成示意图,如图6所示,该嵌入式设备20可以包括:处理单元610和存储单元620。
其中,处理单元610和存储单元620相互配合,可以用于支持嵌入式设备20执行上述方法200或方法400的输出日志数据阶段的步骤等,和/或用于本文所描述的技术的其他过程。
此外,该嵌入式设备20还可以包括通信单元630,用于支持嵌入式设备20执行上述方法200或方法400的涉及的和服务器、开发者设备10、日志解析设备30的信息交互过程等,此处不再赘述。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
在采用集成的单元的情况下,嵌入式设备可以包括处理模块、存储模块和通信模块。其中,处理模块可以用于对嵌入式设备的动作进行控制管理,例如,可以用于支持嵌入式设备执行上述处理单元610、存储单元620和通信单元630执行的步骤。存储模块可以用于支持嵌入式设备执行存储程序代码和数据等,例如,存储模块可以存储本申请实施例中的二进制运行程序和生成的日志数据等。通信模块,可以用于支持嵌入式设备20与其他电子设备的通信,例如嵌入式设备20与服务器、开发者设备10、日志解析设备30的通信等。
其中,处理模块可以是处理器或控制器。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理(digital signal processing,DSP)和微处理器的组合等等。存储模块可以是存储器。通信模块具体可以为射频电路、蓝牙芯片、Wi-Fi芯片等与其他嵌入式设备交互的设备。
在一个实施例中,本实施例所涉及的开发者设备10、日志解析设备30也可以是具有图6所示结构的设备,包括图6所示的部分或者全部单元,在此不再赘述。
本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在嵌入式设备上运行时,使得嵌入式设备执行上述相关方法步骤实现上述实施例中的生成日志的方法。
本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的生成日志的方法。
另外,本申请的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的生成日志的方法。
其中,本实施例提供的电子设备、计算机可读存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
通过以上实施方式的描述,所属领域的技术人员可以了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (9)
1.一种生成日志的方法,其特征在于,应用于包括嵌入式设备的系统中,所述方法包括:
获取日志服务的源代码,其中,所述源代码包括字符串部分和参数部分,所述字符串部分用于确定访问所述日志服务对应的第一日志接口;
编译所述源代码,得到所述日志服务的二进制运行程序,所述二进制运行程序包括输出日志数据的框架,所述日志数据的框架用于指示所述嵌入式设备输出第一日志数据,所述第一日志数据是结构化的二进制日志数据,所述第一日志数据包括第一索引值和所述日志服务的实际运行参数,所述第一索引值是根据所述二进制运行程序中所述字符串部分的存储地址确定的数值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述嵌入式设备获取所述二进制运行程序;
所述嵌入式设备运行所述二进制运行程序确定所述日志数据的框架,生成所述第一日志数据。
3.根据权利要求1或2所述的方法,其特征在于,所述嵌入式设备获取所述二进制运行程序,包括:
所述嵌入式设备从服务器获取所述二进制运行程序;或者
所述嵌入式设备预置所述二进制运行程序。
4.根据权利要求1至2中任一项所述的方法,其特征在于,所述系统还包括日志解析设备,所述方法还包括:
所述日志解析设备获取所述第一日志数据和所述源代码对应的所述二进制运行程序,所述二进制运行程序中所述字符串部分的存储地址和所述字符串部分存在对应关系;
所述日志解析设备根据所述第一日志数据,获取所述第一索引值和所述日志服务的实际运行参数;
所述日志解析设备根据所述第一索引值,确定所述第一日志接口;
所述日志解析设备根据所述第一日志接口确定所述日志服务的所述字符串部分,根据所述字符串部分和所述实际运行参数还原所述日志服务的明文日志。
5.一种电子设备,其特征在于,包括:
获取单元,用于获取日志服务的源代码,其中,所述源代码包括字符串部分和参数部分,所述字符串部分用于确定访问所述日志服务对应的第一日志接口;
处理单元,用于编译所述源代码,得到所述日志服务的二进制运行程序,所述二进制运行程序包括输出日志数据的框架,所述日志数据的框架用于指示嵌入式设备输出第一日志数据,所述第一日志数据是结构化的二进制日志数据,所述第一日志数据包括第一索引值和所述日志服务的实际运行参数,所述第一索引值是根据所述二进制运行程序中所述字符串部分的存储地址确定的数值。
6.一种电子设备,其特征在于,包括:
获取单元,用于获取二进制运行程序,所述二进制运行程序由包括字符串部分和参数部分的源代码生成;
处理单元,用于运行所述二进制运行程序确定日志数据的框架,生成第一日志数据,所述第一日志数据包括第一索引值和所述日志服务的实际运行参数,其中,所述第一索引值是根据所述二进制运行程序中的字符串部分的存储地址确定的数值。
7.根据权利要求6所述的电子设备,其特征在于,所述二进制运行程序是所述获取单元从服务器获取的;或者,所述二进制运行程序是所述电子设备预置的。
8.一种电子设备,其特征在于,包括:
获取单元,用于获取第一日志数据和源代码对应的二进制运行程序,所述二进制运行程序由包括字符串部分和参数部分的源代码生成,所述二进制运行程序中的所述字符串部分的存储地址和所述字符串部分存在对应关系;
处理单元,用于:
根据所述第一日志数据,获取第一索引值和所述日志服务的实际运行参数,所述第一索引值是根据所述二进制运行程序中所述字符串部分的存储地址确定的数值;
根据所述第一索引值,确定所述第一日志接口;
根据所述第一日志接口确定所述日志服务的所述字符串部分,根据所述字符串部分和所述实际运行参数还原所述日志服务的明文日志。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1至4中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010869425.1A CN114116367B (zh) | 2020-08-25 | 2020-08-25 | 一种生成日志的方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010869425.1A CN114116367B (zh) | 2020-08-25 | 2020-08-25 | 一种生成日志的方法及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114116367A CN114116367A (zh) | 2022-03-01 |
CN114116367B true CN114116367B (zh) | 2022-11-01 |
Family
ID=80373957
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010869425.1A Active CN114116367B (zh) | 2020-08-25 | 2020-08-25 | 一种生成日志的方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114116367B (zh) |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140115304A1 (en) * | 2012-10-18 | 2014-04-24 | Synopsys, Inc. | Compressed instruction code storage |
KR20150125275A (ko) * | 2014-04-30 | 2015-11-09 | 삼성전자주식회사 | 소프트웨어 시스템의 디버깅 장치 및 방법 |
CN105095304A (zh) * | 2014-05-19 | 2015-11-25 | 华为技术有限公司 | 日志模板生成方法及设备 |
US9703675B2 (en) * | 2014-08-11 | 2017-07-11 | Microsoft Technology Licensing, Llc | Structured logging and instrumentation framework |
US10210168B2 (en) * | 2015-02-23 | 2019-02-19 | International Business Machines Corporation | Managing data in storage according to a log structure |
CN106484728B (zh) * | 2015-08-31 | 2019-08-30 | 联芯科技有限公司 | 日志数据的生成方法、解析方法、生成装置及解析装置 |
CN106648467A (zh) * | 2016-12-28 | 2017-05-10 | 税友软件集团股份有限公司 | 一种日志生成方法及系统 |
CN109960590B (zh) * | 2019-03-26 | 2021-05-18 | 北京简约纳电子有限公司 | 一种优化嵌入式系统诊断打印的方法 |
CN110689349B (zh) * | 2019-10-08 | 2023-07-11 | 深圳前海微众银行股份有限公司 | 一种区块链中的交易哈希值存储和搜索方法及装置 |
-
2020
- 2020-08-25 CN CN202010869425.1A patent/CN114116367B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114116367A (zh) | 2022-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111581563B (zh) | 页面响应方法、装置、存储介质和电子设备 | |
CN108650287B (zh) | 物联网中的终端设备的升级方法、设备及计算机可读介质 | |
CN112395253B (zh) | 索引文件生成方法、终端设备、电子设备及介质 | |
CN111198859A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN111803917B (zh) | 资源的处理方法和装置 | |
US11770458B1 (en) | Systems for exchanging data using intermediate devices | |
CN112729868A (zh) | 一种车辆诊断方法、装置、设备及介质 | |
CN109697034B (zh) | 一种数据写入方法、装置、电子设备及存储介质 | |
CN114116367B (zh) | 一种生成日志的方法及电子设备 | |
CN113204558A (zh) | 数据表结构自动更新方法和装置 | |
CN112988569A (zh) | 一种基于nginx的微服务请求响应查看方法和系统 | |
CN109815351B (zh) | 信息查询方法及相关产品 | |
CN114928562B (zh) | 一种图计算平台的流量处理方法和系统 | |
CN116467315A (zh) | 行为数据的分析方法、装置、设备及存储介质 | |
CN113704120A (zh) | 数据传输方法、装置、设备及存储介质 | |
CN114817160A (zh) | 文件解压方法、装置、电子设备及计算机可读存储介质 | |
CN114063943A (zh) | 数据传输系统、方法、装置、介质和设备 | |
CN112667538A (zh) | 一种获取网卡标识号方法、系统、设备以及介质 | |
CN111190858A (zh) | 软件信息存储方法、装置、设备和存储介质 | |
CN103617052A (zh) | 应用程序的缓存处理方法和装置 | |
CN113496155B (zh) | 信息处理的方法、装置、设备和计算机可读介质 | |
CN114490544B (zh) | 一种新加入主机下载容器镜像的方法及装置 | |
CN114238292B (zh) | 数据清洗方法、装置、计算机设备、计算机可读存储介质 | |
CN117896249A (zh) | 车载埋点数据采集方法、车载装置及车辆 | |
CN108280048B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |