一种日志输出方法和装置转让专利

申请号 : CN201410797577.X

文献号 : CN105760283B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 湛滨瑜

申请人 : 阿里巴巴集团控股有限公司

摘要 :

本申请提供一种日志输出方法和装置。所述方法包括:根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域;监测所述任务单元所属的事务是否提交;如果所述任务单元所属的事务提交,则将所述缓存区域中的所述任务单元的日志输出到磁盘。通过本申请的技术方案,可以确保任务单元的日志与事务的执行结果一致,同时,内存占有率较小、程序可读性高且非常灵活。

权利要求 :

1.一种日志输出方法,其特征在于,所述方法包括:根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域;

监测所述任务单元所属的事务是否提交;

如果所述任务单元所属的事务提交,则将所述缓存区域中的所述任务单元的日志输出到磁盘;

如果所述任务单元所属的事务回滚,则删除所述缓存区域中的所述任务单元的日志。

2.根据权利要求1所述的方法,其特征在于,所述方法包括:在将所述缓存区域中的所述任务单元的日志输出到磁盘之后,删除所述缓存区域中的所述任务单元的日志。

3.根据权利要求1所述的方法,其特征在于,在根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域之前,所述方法还包括:判断所述任务单元是否在本地事务内执行;

如果所述任务单元在本地事务内执行,则根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。

4.一种日志输出装置,其特征在于,所述装置包括:第一输出单元,根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域;

结果监测单元,监测所述任务单元所属的事务是否提交;

第二输出单元,在所述任务单元所属的事务提交时,将所述缓存区域中的所述任务单元的日志输出到磁盘;

第一删除单元,在所述任务单元所属的事务回滚时,删除所述缓存区域中的所述任务单元的日志。

5.根据权利要求4所述的装置,其特征在于,所述装置还包括:第二删除单元,在将所述缓存区域中的所述任务单元的日志输出到磁盘之后,删除所述缓存区域中的所述任务单元的日志。

6.根据权利要求4所述的装置,其特征在于,所述装置还包括:事务判断单元,判断所述任务单元是否在本地事务内执行;

所述第一输出单元,在所述任务单元在本地事务内执行时,根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。

说明书 :

一种日志输出方法和装置

技术领域

[0001] 本申请涉及数据处理技术领域,尤其涉及一种日志输出方法和装置。

背景技术

[0002] 数据库事务是指作为单个逻辑工作单元执行一系列操作,要么完整地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会更新数据库的任何数据。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序的运行更加稳定可靠。
[0003] 一个数据库事务通常会包括有多个任务单元,在执行事务时,需要输出每个任务单元的执行参数和结果等日志,以便于后续数据的备份和恢复。在日志输出的过程中,需要保证每个任务单元的日志与事务的执行结果一致。如果当前事务提交,则需要输出该事务包含的所有任务单元的日志。如果当前事务回滚,则需要确保该事务包含的所有任务单元的日志都回滚。
[0004] 目前,为确保每个任务单元的日志与事务的执行结果一致,可以将每个任务单元的执行参数和结果回传,在事务提交时统一输出。然而,这种实现方式会导致回传参数过多,降低了程序的可读性。在其他的实现方式中,还可以将每个任务单元的执行参数和结果放入线程变量中,在事务提交后,统一从线程变量中获取每个任务单元的执行参数和结果并进行输出。然而,在线程变量中保存大量的执行参数和结果,会占用大量的内存。同时,这两种实现方式都只能在事务提交后进行日志的输出,不够灵活。

发明内容

[0005] 有鉴于此,本申请提供一种日志输出方法和装置。
[0006] 具体地,本申请是通过如下技术方案实现的:
[0007] 一种日志输出方法,所述方法包括:
[0008] 根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域;
[0009] 监测所述任务单元所属的事务是否提交;
[0010] 如果所述任务单元所属的事务提交,则将所述缓存区域中的所述任务单元的日志输出到磁盘。
[0011] 进一步地,所述方法包括:
[0012] 如果所述任务单元所属的事务回滚,则删除所述缓存区域中的所述任务单元的日志。
[0013] 进一步地,所述方法包括:
[0014] 在将所述缓存区域中的所述任务单元的日志输出到磁盘之后,删除所述缓存区域中的所述任务单元的日志。
[0015] 进一步地,在根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域之前,所述方法还包括:
[0016] 判断所述任务单元是否在本地事务内执行;
[0017] 如果所述任务单元在本地事务内执行,则根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。
[0018] 一种日志输出装置,所述装置包括:
[0019] 第一输出单元,根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域;
[0020] 结果监测单元,监测所述任务单元所属的事务是否提交;
[0021] 第二输出单元,在所述任务单元所属的事务提交时,将所述缓存区域中的所述任务单元的日志输出到磁盘。
[0022] 进一步地,所述装置还包括:
[0023] 第一删除单元,在所述任务单元所属的事务回滚时,删除所述缓存区域中的所述任务单元的日志。
[0024] 进一步地,所述装置还包括:
[0025] 第二删除单元,在将所述缓存区域中的所述任务单元的日志输出到磁盘之后,删除所述缓存区域中的所述任务单元的日志。
[0026] 进一步地,所述装置还包括:
[0027] 事务判断单元,判断所述任务单元是否在本地事务内执行;
[0028] 所述第一输出单元,在所述任务单元在本地事务内执行时,根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。
[0029] 由以上描述可以看出,本申请通过将任务单元的日志输出到预设的缓存区域,并在所述任务单元所属的事务提交时,将所述缓存区域中所述任务单元的日志输出到磁盘,进而确保任务单元的日志与事务的执行结果一致。同时,内存占有率较小、程序可读性高且非常灵活。

附图说明

[0030] 图1是本申请一示例性实施例示出的一种日志输出方法的流程示意图。
[0031] 图2是本申请一示例性实施例示出的一种服务端的结构示意图。
[0032] 图3是本申请一示例性实施例示出的一种日志输出装置的结构示意图。

具体实施方式

[0033] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0034] 在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0035] 应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
[0036] 针对上述问题,本申请提供一种日志输出方案,可以确保每个任务单元的日志与事务的执行结果一致。
[0037] 请参考图1,本申请提供一种日志输出方法,所述方法可以应用在服务端上,包括以下步骤:
[0038] 步骤101,根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。
[0039] 一个事务通常包括有多个任务单元,在本实施例中,针对一个事务,分别将其包括的所述多个任务单元的日志输出到预设的缓存区域。具体地,所述任务单元的日志至少包括有:任务单元的执行参数和结果。
[0040] 举例来说,以某个事务为用户取款500元为例,该事务至少包括有以下三个任务单元。其中,任务单元A对用户进行身份验证,任务单元B查询用户账户的余额,任务单元C执行对用户账户500元的扣款操作。可以理解的是,要完成这样一个事务的提交,任务单元A、任务单元B与任务单元C必须都要成功完成,即任务单元A验证用户身份合法,任务单元B查询用户账户的余额大于等于500元,任务单元C在用户账户中成功扣款500元。如果任务单元A、任务单元B和任务单元C中至少一个任务单元没有成功完成,则该事务执行失败,即事务回滚,比如:任务单元B查询用户账户的余额小于500元等情况。
[0041] 以任务单元B为例,根据查询用户账户的余额这个任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。具体地,该任务单元B的执行参数至少包括有:用户账户信息、查询时间以及操作员等,该任务单元B的执行结果为用户账户的余额。在本步骤中,将任务单元B的日志B,即上述执行参数和执行结果输出到预设的缓存区域。同样,根据任务单元A以及任务单元C的执行参数和结果,将任务单元A以及任务单元C的日志A以及日志C输出到所述预设的缓存区域。
[0042] 步骤102,监测所述任务单元所属的事务是否提交。如果所述任务单元所属的事务提交,则执行步骤103。如果所述任务单元所属的事务回滚,则执行步骤104。
[0043] 在本实施例中,针对每个任务单元,监测所述任务单元所属的事务的执行结果,比如:可以通过注册当前事务的事务同步器实现类以监测所述事务的执行结果。其中,所述事务的执行结果包括有提交和回滚。如果所述任务单元所属的事务提交,则执行步骤103。如果所述任务的那样所属的事务回滚,则执行步骤104。
[0044] 步骤103,将所述缓存区域中的所述任务单元的日志输出到磁盘。
[0045] 基于前述步骤102,如果所述任务单元所属的事务提交,意味着各个任务单元的日志与事务一致,将所述缓存区域中的所述任务单元的日志输出到磁盘,已实现日志的存储。
[0046] 仍以步骤101中的用户取款500元的事务为例,如果该事务提交,则在本步骤中,将输出到所述缓存区域中的任务单元A的日志A、任务单元B的日志B以及任务单元C的日志C分别输出到磁盘。
[0047] 步骤104,删除所述缓存区域中的所述任务单元的日志。
[0048] 基于前述步骤103,在将所述缓存区域中的所述任务单元的日志输出到磁盘之后,在本步骤中,删除所述缓存区域中所述任务单元的日志。
[0049] 在另一实施例中,基于前述步骤102,如果所述任务单元所属的事务回滚,即该事务执行失败,则该事务已执行的任务单元的日志与事务的执行结果不一致,在本步骤中,删除所述缓存区域中所述任务单元的日志。
[0050] 仍以步骤101中的用户取款500元的事务为例,如果该事务由于任务单元C执行失败,比如:由于网络故障导致在用户账户中扣款500元失败,则该事务回滚,进而任务单元A以及任务单元B的操作数据不会更新到数据库中,那么,输出到所述缓存区域中的任务单元A以及任务单元B的日志A和日志B已经与该事务的执行结果不一致,所以在本步骤中,将所述缓存区域中的日志A和日志B删除。
[0051] 可选的,在本申请另一实施例中,在执行步骤101:根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域之前,还需要判断所述任务单元是否在本地事务内执行。如果所述任务单元在本地事务内执行,则说明所述任务单元的日志需要和其所属的事务的执行结果保持一致,进而可以根据所述任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。如果所述任务单元不在本地事务内执行,则说明所述任务单元的日志不需要和其所属的事务的执行结果保持一致,将日志输出到磁盘即可。
[0052] 由以上描述可以看出,本申请通过将任务单元的日志输出到预设的缓存区域,并在所述任务单元所属的事务提交时,将所述缓存区域中所述任务单元的日志输出到磁盘,进而确保任务单元的日志与事务的执行结果一致。同时,内存占有率较小、程序可读性高且非常灵活。
[0053] 与本申请日志输出方法的实施例相对应,本申请还提供了一种日志输出装置。本申请所述的装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,本申请日志输出装置作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。
[0054] 请参考图2和图3,本申请提供一种日志输出装置200,所述装置可以应用在服务端上,包括有:第一输出单元201、结果监测单元202、第二输出单元203、第一删除单元204、第二删除单元205以及事务判断单元206。
[0055] 其中,所述第一输出单元201,根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。
[0056] 所述结果监测单元202,监测所述任务单元所属的事务是否提交。
[0057] 所述第二输出单元203,在所述任务单元所属的事务提交时,将所述缓存区域中的所述任务单元的日志输出到磁盘。
[0058] 所述第一删除单元204,在所述任务单元所属的事务回滚时,删除所述缓存区域中的所述任务单元的日志。
[0059] 所述第二删除单元205,在将所述缓存区域中的所述任务单元的日志输出到磁盘之后,删除所述缓存区域中的所述任务单元的日志。
[0060] 所述事务判断单元206,判断所述任务单元是否在本地事务内执行。
[0061] 进一步地,所述第一输出单元201,在所述任务单元在本地事务内执行时,根据任务单元的执行参数和结果,将所述任务单元的日志输出到预设的缓存区域。
[0062] 上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0063] 以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。