日志记录的处理方法及装置制造方法

文档序号:6518445阅读:165来源:国知局
日志记录的处理方法及装置制造方法
【专利摘要】本发明公开了一种日志记录的处理方法及装置。其中,该方法包括:在ETL包中配置需要输出的日志记录,获取日志输出表;获取需要增加到日志中的日志记录值,日志包括至少一条日志行;调用定制日志函数,将需要增加到日志中的日志记录值输出到ETL包运行的日志行中;从日志行中提取日志记录值和执行编码值;创建日志记录值与执行编码值的关联关系;从日志输出表中查询得到具有相同执行编码值的日志行;根据日志记录值与执行编码值的关联关系,将日志记录值添加到日志输出表中具有相同执行编码值的日志行中。通过本发明,能够实现可以根据用户需求在输出的日志信息中派生新的日志列,从而扩展日志输出表。
【专利说明】日志记录的处理方法及装置【技术领域】
[0001]本发明涉及计算机数据处理领域,具体而言,涉及一种日志记录的处理方法及装置。
【背景技术】
[0002]ETL是一种数据提取、转换和加载数据的过程,负责将分散的异构数据进行清洗、转换、集成,最后加载到数据库中,SSIS是一种ETL工具,SSIS日志(SSISLogging)用于管理和控制SSIS包运行时的日志输出,其可输出的日志列可以预先定义,开发时只需要选择或不选择数据列,从而确定在日志输出表中添加需要的数据列作为特定输出,有其自身的局限性,这种方式导致在配置日志输出时无法添加自定义的日志列。例如,当系统并发跑ETL包时,一个ETL包运行代表一个客户,若想要在日志输出表中区分这些ETL包所输出的日志,当前的系统无法获知,从而导致用户查询和管理日志效率低。
[0003]目前针对相关技术的由于无法自定义ETL包运行时输出的日志信息,导致用户无法高效应用或处理日志信息的问题,目前尚未提出有效的解决方案。

【发明内容】

[0004]针对相关技术的由于无法自定义ETL包运行时输出的日志信息,导致用户无法高效应用或处理日志信息的问题,目前尚未提出有效的解决方案,为此,本发明的主要目的在于提供一种日志记录的处理方法及装置,以解决上述问题。
[0005]为了实现上述目的,根据本发明的一个方面,提供了一种日志记录的处理方法,该方法包括:在ETL包中配置需要输出的 日志记录,获取日志输出表;获取需要增加到日志中的日志记录值,日志包括至少一条日志行;调用定制日志函数,将需要增加到日志中的日志记录值输出到ETL包运行的日志行中;从日志行中提取日志记录值和执行编码值;创建日志记录值与执行编码值的关联关系;从日志输出表中查询得到具有相同执行编码值的日志行;根据日志记录值与执行编码值的关联关系,将日志记录值添加到日志输出表中具有相同执行编码值的日志行中。
[0006]为了实现上述目的,根据本发明的另一方面,提供了一种日志记录的处理装置,该装置包括:获取模块,用于获取需要增加到日志中的日志记录值,日志包括至少一条日志行;处理模块,用于在ETL包中配置需要输出的日志记录,获取日志输出表;调用模块,用于调用定制日志函数,将需要增加到日志中的日志记录值输出到ETL包运行的日志行中;提取模块,用于从日志行中提取日志记录值和执行编码值;创建模块,用于创建日志记录值与执行编码值的关联关系;查询模块,用于从日志输出表中查询得到具有相同执行编码值的日志行;添加模块,用于根据日志记录值与执行编码值的关联关系,将日志记录值添加到日志输出表中具有相同执行编码值的日志行中。
[0007]通过本发明,采用在ETL包中配置需要输出的日志记录,获取日志输出表;获取需要增加到日志中的日志记录值,日志包括至少一条日志行;调用定制日志函数,将需要增加到日志中的日志记录值输出到ETL包运行的日志行中;从日志行中提取日志记录值和执行编码值;创建日志记录值与执行编码值的关联关系;从日志输出表中查询得到具有相同执行编码值的日志行;根据日志记录值与执行编码值的关联关系,将日志记录值添加到日志输出表中具有相同执行编码值的日志行中,解决了相关技术的由于无法自定义ETL包运行时输出的日志信息,导致用户无法高效应用或处理日志信息的问题,进而实现可以根据用户需求在输出的日志信息中派生新的日志列,从而达到扩展日志输出表的效果。
【专利附图】

【附图说明】
[0008]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0009]图1是根据本发明实施例的日志记录的处理方法流程示意图;
[0010]图2是根据本发明实施例的日志记录的处理方法的详细流程图;
[0011]图3是根据本发明实施例的日志记录的处理装置结构示意图。
【具体实施方式】
[0012]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
[0013]转向附图,其中相同的参考标号指代相同的元素,本发明的原理被示为在一个合适的计算环境中实现。以下描述基于所述的本发明的实施例,并且不应认为是关于此处未明确描述的替换实施例而限制本发明。
[0014]图1是根据本发明实施例的日志记录的处理方法流程示意图;图2是根据本发明实施例的日志记录的处理方法的详细流程图。
[0015]如图1所示该方法包括如下步骤:
[0016]步骤S102,在ETL包中配置需要输出的日志记录,获取日志输出表;
[0017]步骤S104,获取需要增加到日志中的日志记录值,日志包括至少一条日志行。
[0018]步骤S106,调用定制日志函数,将需要增加到日志中的日志记录值输出到ETL包运行的日志行中。
[0019]步骤S108,从日志行中提取日志记录值和执行编码值。
[0020]步骤S110,创建日志记录值与执行编码值的关联关系。
[0021]步骤S112,从日志输出表中查询得到具有相同执行编码值的日志行。
[0022]步骤SI 14,根据日志记录值与执行编码值的关联关系,将日志记录值添加到日志输出表中具有相同执行编码值的日志行中。
[0023]本申请上述实施例通过定制日志函数来将需要添加的日志记录值输出到ETL包运行的日志行中,然后根据日志记录值与固有的参数执行编码值之间的关联关系,使得在ETL包运行输出日志输出表时,将日志记录值添加到日志输出表中所有具有相同执行编码值的日志行中。从而可以实现对日志输出表的扩展,即派生一个日志列,该日志列保存了按用户需求添加的日志记录值。由此可知,本申请上书实施例解决了相关技术的由于无法自定义ETL包运行时输出的日志信息,导致用户无法高效应用或处理日志信息的问题,进而实现可以根据用户需求在输出的日志信息中派生新的日志列,从而达到扩展日志输出表的效果。
[0024]本申请上述实施例中的添加的日志列可以根据用户的需求增加,即可以添加至少一个日志列。
[0025]具体的,以SSIS为例,当需要添加的日志信息值为客户信息时,例如客户标识(ProfilelD),本申请可以在原来的日志输出表中扩展出来一列来添加客户信息,从而用户可以获知哪些日志输出是对应哪些客户的,从而达到扩展日志输出列的目的。
[0026]以SSIS为例,在ETL包运行时,SSIS日志(SSISLogging)的日志Logging配置里可供选择的日志输出表可以包括如下日志列:Computer, Operation, SourceName, SourceID,ExecutionID, MessageText, DataBytes。其中,ExecutionID 的类型为 GUID,表不一次 ETL运行的唯一标识,用于区分多次ETL运行记录,并且在一次ETL运行里,各输出日志行里该ExecutionID列的值是一致的;MessageText为消息信息,相当于详细信息列。下面就在上述日志输出表中添加一个新日志列[例如客户标识(ProfileID)]为例来详细描述本申请,其中,客户标识(ProfileID)可以表示当前ETL包运行所对应的特定客户信息标识。
[0027]如图3所示,首先,本申请需要通过编辑ETL包来实现SSIS配置日志,包括ETL包固有的日志记录以及需要添加的自定义日志记录(例如客户信息标识);然后,运行ETL包,输出配置的日志所产生的日志行(即固有的日志记录),及特定的带有派生列值的日志行(需要添加的自定义日志记录);最后,将添加日志派生列,从而派生列中的日志记录值添加到曰志中。
[0028]具体的,固有的日志记录可以通过选择SSISLogging里用户需要的日志事件及相关的日志列(包含Message列)来获取到,需要派生添加的日志记录可以通过在ETL包中添加相应的Script Component控件,以及在Script Component控件里添加相应的程序代码,从而在运行ETL包时可以找到需要派生的日志记录列的值。
[0029]下面就如何实现上述添加的日志信息的派生过程进行详细描述。
[0030]本申请上述实施例中,在ETL包中配置需要派生的日志列的过程中,需要通过步骤S102获取需要增加到日志中的日志记录值,并通过步骤S104来实现输出一特定的日志行,将获取到的日志记录值保存在预定的一日志列中。
[0031]上述步骤S102可以包括如下步骤:
[0032]首先,获取ETL包所关联的数据库。具体的,每一个ETL包运行过程中都对应一个关联的数据库,该数据库用于保存ETL对数据进行抽取、转换并加载后的结果。即与某一个ETL包关联的数据库保存有多张数据表,用于保存各个日志列的数据。
[0033]然后,从数据库中获取ETL包对应的日志记录值。具体的,该步骤可以通过在ETL包中添加ScriptComponent控件(SSIS里的控件,用于编写c#等代码所用),并在控件里编写代码,根据商务逻辑找到ProfileID列,此处的商务逻辑是指系统查询得到日志记录值(例如客户信息ProfilelD)的实现过程,即实现从数据库中获取ETL包对应的日志记录值的的业务逻辑。
[0034]例如,由于每个ETL包关联的数据库都具有一个数据库名称,且该数据库名程包含了可以唯一表示当前数据库的编码Profi IeID,可以通过该Profi IeID来表征当前ETL包的客户信息。因此,可以通过如下步骤来实现从数据库中获取ETL包对应的日志记录值的步骤:获取数据库的名称;从数据库名称中提取表征日志记录值的字符串,以获取日志记录值。由此,可以实现通过连接字符串的数据库名称来找到ETL包所对应的客户信息。需要注意的是,上述方法是本发明的一种示例,本发明还可以通过各种变量或者执行时间作为唯一标识来表征ETL包客户信息。
[0035]上述实施例中的ETL包运行的日志行中可以包括一消息文本列,通过将消息文本列的值设置为需要增加到日志中的日志记录来获取需要增加的日志记录值。由此可知,ETL包执行时,通过程序动态获取到扩展列的信息,即派生的客户信息,此扩展信息由具体的业务逻辑所决定的。
[0036]上述步骤S104可以通过调用定制日志函数,将需要增加到日志中的日志记录值输出到ETL包运行的日志行中。其中,上述定制日志函数为添加的CustomerLogging,即利用微软提供的日志输出API在整个ETL执行前将其扩展列信息进行手动的日志输出,并将扩展列信息输出到原有字段MessageText。
[0037]具体的,上述步骤通过调用API,利用定制日志函数CustomerLogging的应用程序编程接口 API来将需要派生的日志记录值输出到该ETL包运行的日志行的一日志列MessageText中,从而使得日志中的一日志行下面添加了一条特定的日志记录值,例如,在ETL包运行得到的日志行的一日志列Message下面添加一日志记录值000217 (ProfilelD:000217)。该日志记录值可用于表征当前ETL包的用户信息的唯一标识。需要注意的是,此处将Message列的信息设置为ProfileID:000217可以是这里通过特定的格式将ProfilelD进行了输出。
[0038]由上可知,本申请通过调用SSIS CustomLogging的API,实现输出一条特定的日志行,将Message列的值设置为派生列的值(例如=ProfileID:000217)。
[0039]优选地,本申请上述实施例中,由于执行编码值ExecutionID可以作为唯一标识来表征ETL包运行后得到的日志行。因此,在完成步骤S104之后,后台可以通过步骤S106和步骤S108来获取派生的日志记录值与日志行的对应关系,具体的实现步骤如下:
[0040]步骤S106,从日志行中提取日志记录值和执行编码值。该执行编码值可以是ExecutionID。
[0041]具体的,该步骤实现了,在分析SSISLoging时,先根据日志行中的MessageText列找出已经通过API输出的具体Message列的值(如ProfilelD),然后,将该Message列与本行日志记录的ExecutionID列建立关联,因此,可以通过ExecutionID列查找出这个Profile在并发执行ETL时所产生的所有日志记录值,从而执行逐行根据日志记录值添加派生列(ProfilelD)。
[0042]步骤S108,创建日志记录值与执行编码值的关联关系。
[0043]本申请上述实施例中,步骤S108创建日志记录值与执行编码值的关联关系的步骤可以包括如下步骤:创建ETL对应的临时表,临时表包括日志记录值、执行编码值,以及日志记录值与执行编码值之间的对应关系。
[0044]在获取到上述步骤完成的临时表之后,系统在运行ETL包时,可以通过派生的Message列的数据行来提取与该列的值对应的执行编码值ExecutionID。
[0045]步骤S110,从日志输出表中查询得到具有相同执行编码值的日志行。
[0046]本申请上述实施例中,ETL包中配置需要输出的日志记录,并获取日志输出表的步骤可以包括如下步骤:选择ETL包中需要输出的日志事件,并选择日志事件包含的日志列;在运行SSIS包之后,获取日志输出表,其中,日志输出表包括用于填写执行编码值的日志列。
[0047]具体的,上述通过运行ETL包后,通过通过ExecutionID和MessageText (含ProfilelD的特殊日志记录值)的横向关联,可以高效获取到当前ETL包所对应的需要派生的日志记录值,具体的,可以通过表连接SQL获取。
[0048]上述实施例可以通过如下相应的SQL语句实现:
[0049]
【权利要求】
1.一种日志记录的处理方法,其特征在于,包括: 在ETL包中配置需要输出的日志记录,获取日志输出表; 获取需要增加到日志中的日志记录值,所述日志包括至少一条日志行; 调用定制日志函数,将所述需要增加到日志中的日志记录值输出到ETL包运行的日志行中; 从所述日志行中提取所述日志记录值和执行编码值; 创建所述日志记录值与所述执行编码值的关联关系; 从所述日志输出表中查询得到具有相同所述执行编码值的日志行; 根据所述日志记录值与所述执行编码值的关联关系,将所述日志记录值添加到所述日志输出表中具有相同所述执行编码值的日志行中。
2.根据权利要求 1所述的方法,其特征在于,获取需要增加到日志中的日志记录值的步骤包括: 获取所述ETL包所关联的数据库; 从所述数据库中获取所述ETL包对应的所述日志记录值,该步骤包括:获取所述数据库的名称;从所述数据库名称中提取表征所述日志记录值的字符串,以获取所述日志记录值。
3.根据权利要求2所述的方法,其特征在于,ETL包中配置需要输出的日志记录,并获取日志输出表的步骤包括: 选择所述ETL包中需要输出的日志事件,并选择所述日志事件包含的日志列; 在运行所述ETL包之后,获取所述日志输出表,其中,所述日志输出表包括用于填写所述执行编码值的日志列。
4.根据权利要求3所述的方法,其特征在于,创建所述日志记录值与所述执行编码值的关联关系的步骤包括:创建所述ETL对应的临时表,所述临时表包括所述日志记录值、所述执行编码值,以及所述日志记录值与所述执行编码值之间的对应关系。
5.根据权利要求4所述的方法,其特征在于,根据所述日志记录值与所述执行编码值的关联关系,将所述日志记录值添加到所述日志输出表中具有相同所述执行编码值的日志行中的步骤包括: 根据所述执行编码值建立所述日志输出表与所述临时表之间的关联关系; 从所述临时表中提取所述ETL包对应的所述日志记录值; 在从所述日志输出表中获取到具有相同所述执行编码值的日志行之后,根据所述日志输出表与所述临时表之间的关联关系,将所述日志记录值添加到所述具有相同所述执行编码值的日志行中。
6.根据权利要求1所述的方法,其特征在于,所述ETL包运行的日志行中包括一消息文本列,将所述消息文本列的值设置为所述需要增加到日志中的日志记录。
7.一种日志记录的处理装置,其特征在于,包括: 处理模块,用于在ETL包中配置需要输出的日志记录,获取日志输出表; 获取模块,用于获取需要增加到日志中的日志记录值,所述日志包括至少一条日志行; 调用模块,用于调用定制日志函数,将所述需要增加到日志中的日志记录值输出到ETL包运行的日志行中; 提取模块,用于从所述日志行中提取所述日志记录值和执行编码值; 创建模块,用于创建所述日志记录值与所述执行编码值的关联关系; 查询模块,用于从所述日志输出表中查询得到具有相同所述执行编码值的日志行;添加模块,用于根据所述日志记录值与所述执行编码值的关联关系,将所述日志记录值添加到所述日志输出表中具有相同所述执行编码值的日志行中。
8.根据权利要求7所述的装置,其特征在于,所述获取模块包括: 第一子获取模块,用于获取所述ETL包所关联的数据库; 第二子获取模块,用于从所述数据库中获取所述ETL包对应的所述日志记录值,其中,该第二子获取模块包括:读取模块,用于读取所述数据库的名称;第一提取模块,用于从所述数据库名称中提取表征所述日志记录值的字符串,以获取所述日志记录值。
9.根据权利要求8所述的装置,其特征在于,所述查询模块包括: 选择模块,用于选择所述ETL包中需要输出的日志事件,并选择所述日志事件包含的日志列; 运行模块,用于在运行所述ETL包之后,获取所述日志输出表,其中,所述日志输出表包括用于填写所述执行编码值的日志列。
10.根据权利要求9所述的装置,其特征在于,所述创建模块包括:子创建模块,用于创建所述ETL对应的临时表,所述临时表包括所述日志记录值、所述执行编码值,以及所述日志记录值与所述执行编码值之间的对应关系。·
11.根据权利要求10所述的装置,其特征在于,所述添加模块包括: 建立模块,用于根据所述执行编码值建立所述日志输出表与所述临时表之间的关联关系; 第二提取模块,用于从所述临时表中提取所述ETL包对应的所述日志记录值; 增加模块,用于在从所述日志输出表中获取到具有相同所述执行编码值的日志行之后,根据所述日志输出表与所述临时表之间的关联关系,将所述日志记录值添加到所述具有相同所述执行编码值的日志行中。
【文档编号】G06F17/30GK103577586SQ201310554166
【公开日】2014年2月12日 申请日期:2013年11月8日 优先权日:2013年11月8日
【发明者】洪超 申请人:北京国双科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1