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