
技术摘要:
本发明公开了一种日志记录方法及装置,其中所述方法包括:在日志文件中增加第一空白区段;将所述第一空白区段映射至第一内存地址;将需要记录的日志数据写入到所述第一内存地址中,从而将所述日志数据写入到所述日志文件中。本发明解决了现有技术的日志写入效率低,发 全部
背景技术:
一般在系统或软件的运行过程中都会记录日志,日志可以记录软件运行过程中的 操作,软件中数据产生的变化等。某些情况下,在系统或软件崩溃后可通过分析日志,查找 出崩溃的原因,并予以处理解决。 现有的写日志方法有:一、普通文件写日志,这种方式的日志记录效率很低;二、采 用缓存日志分批写入的方式,这种方式虽可提高日志记录的效率,但是又会引起当软件发 生崩溃时导致缓存中的数据丢失,无法写入磁盘的问题。因此,现有技术存在着日志写入效 率低,且发生崩溃时日志的完整性难以保证的问题。
技术实现要素:
鉴于上述问题,本发明提出了一种日志记录方法及装置,解决了现有技术的日志 写入效率低,发生崩溃时日志数据的完整性难以保证的问题。 第一方面,本申请通过一实施例提供如下技术方案: 一种日志记录方法,所述方法包括: 在日志文件中增加第一空白区段;将所述第一空白区段映射至第一内存地址;将 需要记录的日志数据写入到所述第一内存地址中,从而将所述日志数据写入到所述日志文 件中。 优选地,所述在日志文件中增加第一空白区段,包括: 在所述日志文件中确定可写入日志数据的起始位置;在所述起始位置之后增加所 述第一空白区段。 优选地,所述在所述日志文件中确定可写入日志数据的起始位置,包括: 获取当前操作系统的页面大小以及所述日志文件的内容长度;根据所述页面大小 以及所述日志文件的内容长度,确定可写入日志数据的起始位置。 优选地,所述根据所述页面大小以及所述日志文件的内容长度,确定可写入日志 数据的起始位置,包括: 根据所述页面大小以及所述日志文件的内容长度,确定所述日志文件对应的末尾 页面;将所述末尾页面作为可写入日志数据的起始位置。 优选地,所述在所述起始位置之后增加所述第一空白区段,包括: 获取所述起始位置对应的第一长度;获取所述第一空白区段对应的第二长度;将 所述日志文件的内容长度调整为所述第一长度加上所述第二长度后形成的总长度。 优选地,所述在日志文件中增加第一空白区段之前,还包括: 基于从metadata文件中读取的所述日志文件的路径,打开所述日志文件;若打开 失败,则在所述路径下新建所述日志文件。 4 CN 111611217 A 说 明 书 2/11 页 优选地,所述将需要记录的日志数据写入到所述第一内存地址中之后,还包括: 若所述第一内存地址被写满,则关闭所述第一内存地址与所述第一空白区段之间 的映射;在所述日志文件中继续增加第二空白区段;将所述第二空白区段映射至第二内存 地址;将需要记录的日志数据写入到所述第二内存地址中,从而将所述日志数据写入到所 述日志文件中。 优选地,所述将需要记录的日志数据写入到所述第一内存地址中之后,还包括: 若所述第一内存地址被写满,则关闭所述第一内存地址与所述第一空白区段之间 的映射;判断所述日志文件的当前内容长度是否达到预设长度;若是,则新建一新的日志文 件;在所述新的日志文件中增加第三空白区段;将所述第三空白区段映射至第三内存地址; 将需要记录的日志数据写入到所述第三内存地址中,从而将所述日志数据写入到所述新的 日志文件中。 第二方面,基于同一发明构思,本申请通过一实施例提供如下技术方案: 一种日志记录装置,所述装置包括: 空白区段新增模块,用于在日志文件中增加第一空白区段;映射模块,用于将所述 第一空白区段映射至第一内存地址;日志写入模块,用于将需要记录的日志数据写入到所 述第一内存地址中,从而将所述日志数据写入到所述日志文件中。 优选地,所述空白区段新增模块还用于: 在所述日志文件中确定可写入日志数据的起始位置;在所述起始位置之后增加所 述第一空白区段。 优选地,所述空白区段新增模块还用于: 获取当前操作系统的页面大小以及所述日志文件的内容长度;根据所述页面大小 以及所述日志文件的内容长度,确定可写入日志数据的起始位置。 优选地,所述空白区段新增模块还用于: 根据所述页面大小以及所述日志文件的内容长度,确定所述日志文件对应的末尾 页面;将所述末尾页面作为可写入日志数据的起始位置。 优选地,所述空白区段新增模块还用于: 获取所述起始位置对应的第一长度;获取所述第一空白区段对应的第二长度;将 所述日志文件的内容长度调整为所述第一长度加上所述第二长度后形成的总长度。 优选地,还包括:读取模块,用于 在所述在日志文件中增加第一空白区段之前,基于从metadata文件中读取的所述 日志文件的路径,打开所述日志文件;若打开失败,则在所述路径下新建所述日志文件。 优选地,还包括:第一循环模块,用于 在所述将需要记录的日志数据写入到所述第一内存地址中之后,若所述第一内存 地址被写满,则关闭所述第一内存地址与所述第一空白区段之间的映射;在所述日志文件 中继续增加第二空白区段;将所述第二空白区段映射至第二内存地址;将需要记录的日志 数据写入到所述第二内存地址中,从而将所述日志数据写入到所述日志文件中。 优选地,还包括:第二循环模块, 用于在所述将需要记录的日志数据写入到所述第一内存地址中之后,若所述第一 内存地址被写满,则关闭所述第一内存地址与所述第一空白区段之间的映射;判断所述日 5 CN 111611217 A 说 明 书 3/11 页 志文件的当前内容长度是否达到预设长度;若是,则新建一新的日志文件;在所述新的日志 文件中增加第三空白区段;将所述第三空白区段映射至第三内存地址;将需要记录的日志 数据写入到所述第三内存地址中,从而将所述日志数据写入到所述新的日志文件中。 第三方面,基于同一发明构思,本申请通过一实施例提供如下技术方案: 一种日志记录装置,包括处理器和存储器,所述存储器耦接到所述处理器,所述存 储器存储指令,当所述指令由所述处理器执行时使所述日志记录装置执行上述第一方面中 任一项所述方法的步骤。 第四方面,基于同一发明构思,本申请通过一实施例提供如下技术方案: 一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现 上述第一方面中任一项所述方法的步骤。 本发明实施例提供的一种日志记录方法及装置,通过直接在日志文件中增加第一 空白区段,然后以内存映射文件的形式将日志文件的第一空白区段映射到第一内存地址 中,然后在第一内存地址中进行日志数据的写入,由于内存映射文件读写效率远大于普通 的磁盘读写,在第一内存地址中对日志文件的映射内容进行操作可相当于直接对磁盘中的 日志文件进行操作,大大提高了日志的写入效率;同时由于需要写日志的程序的运行不影 响内存映射文件,可在程序发生崩溃时保证日志记录的完整性。 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够 更明显易懂,以下特举本发明的