一种日志数据流生成方法、装置及存储介质与流程

文档序号:28056037发布日期:2021-12-17 22:14阅读:58来源:国知局
一种日志数据流生成方法、装置及存储介质与流程

1.本技术涉及计算机技术领域,尤其涉及一种日志数据流生成方法、装置及存储介质。


背景技术:

2.近年来,随着游戏产业规模的不断扩大,游戏玩家的人数,在线时长,以及游戏产生的数据数量都不断增长。为了便于游戏后台监控游戏内关键数据,以及提取数据进行用户分析,绝大部分的游戏服务器都需要一套完备,可靠的工具链,来提取、收集和上报游戏内关键数据。
3.随着游戏内容的不断更新,以及游戏版本的频繁迭代,这些关键日志的定义以及内容,可能会经常性地发生变化,因此需要一个简洁,易读的游戏日志定义格式,方便对关键日志定义进行编辑,同时需要实现高度自动化,降低日志采集和上报存储环节的人工干预,降低人工干预导致的错误。
4.现在的主流技术里,一般采取json(javascript object notation,一种轻量级的数据交换格式),protobuf(一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议),thrift(一种接口描述语言和二进制通讯协议)等数据协议来定义游戏关键日志。但是使用json、protobuf等数据协议,性能开销较大,且对于非专业开发人员来说,格式复杂性较高。tdr的解决方案会比使用通用的数据协议进行日志定义更高效,但tdr目前不支持golang,且tdr本身自带的功能比较庞杂,且依赖整体的游戏服务器基础框架解决方案,可移植性较差。
5.因此,有必要提供一种可以减少日志定义格式文件转换过程中的人工干预,并提高日志格式转换准确率的日志数据流生成方法、装置及存储介质。


技术实现要素:

6.本技术提供了一种日志数据流生成方法、装置及存储介质,可以减少日志定义格式文件转换过程中的人工干预,并提高日志格式转换准确率。
7.一方面,本技术提供了一种日志数据流生成方法,所述方法包括:
8.确定日志的目标格式的配置信息;所述配置信息包括至少一个结构节点,每个结构节点包括至少一个入口节点;
9.遍历每个结构节点中的入口节点,得到每个结构节点对应的入口节点集;
10.将所述每个结构节点对应的入口节点集转换成每个结构节点对应的目标编程语言的成员变量集;
11.调用每个结构节点对应的目标编程语言的成员变量集,生成日志对象;
12.将所述日志对象转换成日志数据流。
13.另一方面提供了一种日志数据流生成装置,所述装置包括:
14.配置信息确定模块,用于确定日志的目标格式的配置信息;所述配置信息包括至
少一个结构节点,每个结构节点包括至少一个入口节点;
15.入口节点集确定模块,用于遍历每个结构节点中的入口节点,得到每个结构节点对应的入口节点集;
16.成员变量集确定模块,用于将所述每个结构节点对应的入口节点集转换成每个结构节点对应的目标编程语言的成员变量集;
17.日志对象生成模块,用于调用每个结构节点对应的目标编程语言的成员变量集,生成日志对象;
18.日志数据流生成模块,用于将所述日志对象转换成日志数据流。
19.另一方面提供了一种计算机存储介质,所述计算机存储介质存储有至少一条指令或至少一段程序,所述至少一条指令或至少一段程序由处理器加载并执行以实现如上所述的日志数据流生成方法。
20.本技术提供的日志数据流生成方法、装置及存储介质,具有如下技术效果:
21.本技术先确定日志的目标格式的配置信息;所述配置信息包括至少一个结构节点,每个结构节点包括至少一个入口节点;然后遍历每个结构节点中的入口节点,得到每个结构节点对应的入口节点集;再将所述每个结构节点对应的入口节点集转换成每个结构节点对应的目标编程语言的成员变量集;从而将定义好的日志格式转换成目标编程语言的成员变量集;再调用每个结构节点对应的目标编程语言的成员变量集,生成日志对象,将所述日志对象转换成日志数据流;从而不需要服务器直接读写初始的日志的目标格式,可以直接根据转换后的目标编程语言的成员变量集生成日志数据流,减少了日志定义格式文件转换过程中的人工干预,并提高了日志格式转换的准确率。
附图说明
22.为了更清楚地说明本技术实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
23.图1是本技术实施例提供的一种日志数据流生成系统的示意图;
24.图2是本技术实施例提供的一种日志数据流生成方法的流程示意图;
25.图3是本技术实施例提供的一种xml日志的目标格式配置信息示意图;
26.图4是本技术实施例提供的一种xml日志的目标格式配置信息转换后的golang代码;
27.图5是本技术实施例提供的图4中golang代码得到的日志数据流;
28.图6是本技术实施例提供的日志上报模块的工作流程图;
29.图7是本技术实施例提供的日志数据流生成工具的框架图;
30.图8是本技术实施例提供的一种日志数据流生成装置的结构示意图;
31.图9是本技术实施例提供的一种服务器的结构示意图;
32.图10是本技术实施例提供的一种区块链系统的结构示意图;
33.图11是本技术实施例提供的区块结构示意图。
具体实施方式
34.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
35.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
36.云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
37.目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(id,id entity)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
38.存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(raid,redundant array of independent disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
39.以下对本说明书中涉及的术语进行解释:
40.python:一种计算机领域广泛使用的脚本编程语言,用于开发日志转义工具;
41.udp internet:协议集支持的无连接的传输协议,该协议称为用户数据报协议(udp,user datagram protocol)。
42.xml:可扩展标记语言,标准通用标记语言的子集,简称xml;是一种用于标记电子文件使其具有结构性的标记语言。
43.mysql:关系型数据库管理系统。
44.golang:服务器实际实现所用的并行式编程语言。
45.goroutine:golang语言中的轻量级线程。
46.请参阅图1,图1是本技术实施例提供的一种日志数据流生成系统的示意图,如图1所示,该日志数据流生成系统可以至少包括服务器01和客户端02。
47.具体的,本说明书实施例中,所述服务器01可以包括一个独立运行的服务器,或者分布式服务器,或者由多个服务器组成的服务器集群。服务器01可以包括有网络通信单元、处理器和存储器等等。具体的,所述服务器01可以用于对日志的目标格式进行转义并生成日志数据流。
48.具体的,本说明书实施例中,所述客户端02可以包括智能手机、台式电脑、平板电脑、笔记本电脑、数字助理、智能可穿戴设备等类型的实体设备,也可以包括运行于实体设备中的软体,例如一些服务商提供给用户的网页页面,也可以为该些服务商提供给用户的应用。具体的,所述客户端02可以用于在线查询生成的日志数据流。
49.以下介绍本技术的一种日志数据流生成方法,图2是本技术实施例提供的一种日志数据流生成方法的流程示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或服务器产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。具体的,所述方法可以应用于服务器中,如图2所示,所述方法可以包括:
50.s201:确定日志的目标格式的配置信息;所述配置信息包括至少一个结构节点,每个结构节点包括至少一个入口节点。
51.在本说明书实施例中,如图3所示,日志的目标格式可以为基于xml的可编辑格式,结构节点可以为struct节点,入口节点为entry节点;每个struct节点03中包括一个struct标签04,struct标签用于对struct节点进行标识;每个struct标签,代表一种日志格式的定义。每个entry标签,代表日志中的一个字段。name标签,表示名称,desc是对应的描述,type是对应的数据类型,size是数据长度。在一个具体的实施例中,针对游戏服务器,其中字段标签包括游戏时间的时间,该xml文件在游戏服务器侧,转换为golang数据文件,在日志入库的服务进程里,转换为mysql的字段描述文件。可以通过添加、删除和修改xml文件,来编辑日志格式,以及增删日志及具体的日志字段。
52.在本说明书实施例中,还可以采用自定义嵌套结构的日志的目标格式。
53.s203:遍历每个结构节点中的入口节点,得到每个结构节点对应的入口节点集。
54.具体的,在本说明书实施例中,一种日志的目标格式中可以包括一个或多个struct节点,一个结构节点对应的入口节点集中可以包括一个或多个入口节点。在一个具体的实施例中,如图3所示,一个struct节点中包括四个entry节点。
55.s205:将所述每个结构节点对应的入口节点集转换成每个结构节点对应的目标编程语言的成员变量集。
56.具体的,在本说明书实施例中,目标编程语言的成员变量集可以以golang代码的形式进行展示,从而可供服务器进行调用。一个入口节点集包括一个或多个入口节点,一个成员变量集包括一个或多个入口节点,入口节点集与对应的成员变量集中的元素个数相同;目标编程语言的自定义字段包括第一标识信息,转换后的每个成员变量包括第二标识信息,第一标识信息与第二标识信息不同,用于区分目标编程语言的自定义字段和成员变量。例如,目标编程语言为golang时,golang的自定义字段以小写m开头,则golang的成员变量可以以大写m开头,从而将两者区分开。其中golang的自定义字段可以为元信息,例如原
始struct名字。
57.在一个具体的实施例中,转换后的golang代码如图4所示,图4为图3中xml日志的目标格式配置信息转换后的golang代码。
58.在本说明书实施例中,所述方法还包括:
59.确定日志的目标格式中每个入口节点的第一数据类型;
60.确定所述目标编程语言的成员变量集中每个成员变量的第二数据类型;
61.构建第一数据类型与第二数据类型的映射关系;
62.基于预设数据库存储第一数据类型与第二数据类型的映射关系;
63.在本说明书实施例中,所述第一数据类型与所述第二数据类型可以为相同的数据类型,也可以为不同的数据类型。
64.在本说明书实施例中,所述将所述每个结构节点对应的入口节点集转换成每个结构节点对应的目标编程语言的成员变量集包括:
65.将所述每个结构节点对应的入口节点集中目标入口节点转换成每个结构节点对应的目标编程语言的成员变量集中目标成员变量。
66.在本说明书实施例中,所述将所述每个结构节点对应的入口节点集中目标入口节点转换成每个结构节点对应的目标编程语言的成员变量集中目标成员变量包括:
67.确定所述每个结构节点对应的入口节点集中的目标入口节点;
68.确定所述目标入口节点对应的第一目标数据类型;
69.从所述预设数据库中查找与所述第一目标数据类型匹配的第二目标数据类型;
70.将所述目标入口节点转换为目标编程语言的目标成员变量,所述目标成员变量为第二目标数据类型。
71.在本说明书实施例中,所述方法还包括:
72.设置所述目标编程语言的成员变量集中每个成员变量的元标签;
73.在本说明书实施例中,所述元标签为meta tag。元标签的设置可以将原始xml日志中定义的名字和golang的成员变量联系起来,主要用于golang反射机制(reflection)的使用。
74.所述将所述目标入口节点转换为目标编程语言的目标成员变量的步骤之后,所述方法还包括:
75.确定所述目标成员变量的目标元标签;
76.基于所述目标成员变量的目标元标签,构建目标入口节点与目标成员变量的映射关系。
77.具体的,在本说明书实施例中,可以使用python作为成员变量的转换工具;利用该工具进行转换时,需要输入xml文件的路径和转换后golang文件的路径;转换时,会遍历xml文件中所有的struct节点,依次将struct节点的定义,转换为golang里的类(struct)。xml文件中每个struct节点里,依次遍历每个entry节点,将entry节点转换为对应数据类型的成员变量。转换后的成员变量,都以大写m开头,与小写m开头的golang自定义字段区分开(这些自定义字段可能是一些元信息,例如原始struct名字等)。所有的golang成员变量还会生成对应的标签(meta tag),将原始xml中定义的名字和golang的成员变量联系起来,主要用于golang反射机制(reflection)使用。
78.在一个具体的实施例中,xml日志目标格式定义中的数据类型与golang的数据类型映射关系如表1所示。
79.表1:xml日志目标格式定义中的数据类型与golang数据类型的映射关系
[0080][0081][0082]
s207:调用每个结构节点对应的目标编程语言的成员变量集,生成日志对象。
[0083]
在本说明书实施例中,服务器通过调用每个结构节点对应的目标编程语言的成员变量集作为模板,生成对应的日志对象。
[0084]
s209:将所述日志对象转换成日志数据流。
[0085]
具体的,在本说明书实施例中,日志数据流中的字段与日志的目标格式的配置信息中字段为一一对应关系。
[0086]
在本说明书实施例中,所述将所述日志对象转换成日志数据流的步骤之后,所述方法还包括:
[0087]
基于预设数据校验规则,对所述日志数据流进行验证;
[0088]
当所述日志数据流中存在错误信息时,删除所述日志数据流。
[0089]
在本说明书实施例中,对于日志自动转换后的golang原生代码,提供更多的数据接口,例如数据校验规则等,可以在对一些错误的关键日志生成进行校验,例如日期,格式等。例如日志的时间与当前时间相差较大,或者用户id为0,都可以确定为错误的日志。
[0090]
在本说明书实施例中,采用tostring方法,将一个golang的日志对象,转换为数据流的日志文本;这种转换方式,相比利用protobuf等外部数据协议进行序列化和反序列化要高效。
[0091]
在一个实施例中,模拟protobuf实现了一个利用golang反射机制来进行golang对象到数据流转换的工具,在实验机器上(8核,内存32g)运行100000次,结果如表2所示。采用本技术的转换方法和采用反射机制的其他解决方案(例如protobuf)进行对比实验,可见,本技术的转换方法耗时短,转换速度快。
[0092]
表2:
[0093] 运行100000次数据转换的耗时本技术的数据流转换方法186.612077ms利用反射机制的数据流转换方法771.110668ms
[0094]
根据图4中golang代码得到的日志数据流如图5所示,其中头部的“befollowednum”为日志的名词,数字部分为具体的数据内容,以“|”分隔,图5中字段与图3中目标格式的配置信息中字段一一对应,图5中“befollowednum”对应于图3中的用户被关注表,图5中“2020-01-21”对应于图3中游戏事件的时间;图5中的“35077854”对应于图3中助手id;图5中的“52”对应于图3中关注数量;图5中的“1”对应于图3中测试环境标识。
[0095]
在本说明书实施例中,所述将所述日志对象转换成日志数据流的步骤之后,所述方法还包括:
[0096]
将所述日志数据流存储于缓冲池中;
[0097]
确定在预设时间段内,所述缓冲池中新增日志数据流的内存值;
[0098]
当所述新增日志数据流的内存值大于预设阈值时,删除所述新增日志数据流。
[0099]
在本说明书实施例中,当预设时间段内产生的新增日志过多时,日志上报线程会造成拥塞,删除新增日志,可以保证日志上传的正常运行。
[0100]
在本说明书实施例中,所述确定在预设时间段内,所述缓冲池中新增日志数据流的内存值的步骤之后,所述方法还包括:
[0101]
根据缓冲池的存储空间设置内存的预设阈值;
[0102]
判断所述缓冲池中新增日志数据流的内存值是否大于预设阈值;
[0103]
当所述新增日志数据流的内存值小于或等于所述预设阈值时,将所述新增日志数据流存储于所述缓冲池中。
[0104]
在本说明书实施例中,可以通过缓冲池防止日志拥塞,从而保证日志存储的正常运行。
[0105]
在本说明书实施例中,所述方法还包括:
[0106]
将所述缓冲池中日志数据流存储于预设日志数据库中。
[0107]
在本说明书实施例中,所述方法还包括:
[0108]
基于区块链系统存储所述缓冲池中日志数据流。所述区块链系统包括多个节点,所述多个节点之间形成点对点网络。
[0109]
在一些实施例中,所述区块链系统可以为图10所示的结构,多个节点之间形成组成的点对点(p2p,peer to peer)网络,p2p协议是一个运行在传输控制协议(tcp,transmission control protocol)协议之上的应用层协议。在区块链系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
[0110]
图10示出的区块链系统中各节点的功能,涉及的功能包括:
[0111]
1)路由,节点具有的基本功能,用于支持节点之间的通信。
[0112]
节点除具有路由功能外,还可以具有以下功能:
[0113]
2)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成记录数据,在记录数据中携带数字签名以表示任务数据的来源,将记录数据发送到区块链系统中的其他节点,供其他节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。
[0114]
3)区块链,包括一系列按照产生的先后时间顺序相互接续的区块(block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点提交的记录数据。
[0115]
在一些实施例中,区块结构(block structure)可以为图11所示的结构,每个区块中包括本区块存储交易记录的哈希值(本区块的哈希值)、以及前一区块的哈希值,各区块通过哈希值连接形成区块链。另外,区块中还可以包括有区块生成时的时间戳等信息。区块链(block chain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了相关的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
[0116]
在本说明书实施例中,缓冲池的设置可以有效避免预设日志数据库中的日志拥塞。
[0117]
具体的,在本说明书实施例中,在服务器代码中内嵌有日志上报模块,该模块为独立线程运行的功能模块,通过chan(golang中不同goroutine间通信的一种管道数据结构),接收业务侧生成的日志,并且通过udp连接传输到数据中心里。工作流程如图6所示,其中游戏业务线程与日志上报线程均属于同一进程,均在游戏服务器中,数据中心可以在游戏服务器中,也可以在游戏服务器之外的其他服务器中;游戏业务线程调用golang代码生成关键日志,并向日志上报线程投递日志;日志上报线程获取数据中心的ip地址和端口,并解析udp地址,与数据中心进程中的udp端口建立连接,连接成功之后接收关键日志投递,得到数据流日志,并向数据中心进程发送数据流日志;数据中心进程接收数据流日志,并存储到对应的日志落数据库(即日志落地数据库,也称日志存储数据库)中。
[0118]
在本说明书实施例中,可以通过chan的缓冲池来进行拥塞控制,如果在一个预设时间段内或同一时刻产生的关键日志过多,将会写入chan超时,此时丢弃生成的多个关键日志,并且记录到系统错误日志中。在写入udp连接时,如果遇到错误,或者超时,日志上报模块将会重新尝试完整的建立udp连接过程,包括:(1)通过进程的配置信息读取数据中心的ip地址和端口(图6中的ip:port);(2)根据ip:port解析udp地址;(3)尝试建立连接,直至连接成功。
[0119]
在本说明书实施例中,数据中心是多组的独立运行进程,这些进程监听对应的udp端口,接收来自游戏业务侧的关键日志上报。并且根据xml定义的日志类型,将日志存储到对应的数据库中。关键日志可以包括多个类型,例如流水日志、登录日志等。
[0120]
在本说明书实施例中,所述将所述缓冲池中日志数据流存储于预设日志数据库中包括:
[0121]
确定所述缓冲池中日志数据流对应的至少一个日志;
[0122]
确定每个日志对应的类型标识信息;
[0123]
根据所述每个日志对应的类型标识信息,确定每个日志对应的日志数据库;
[0124]
将每个日志存储于所述每个日志对应的日志数据库中。
[0125]
具体的,在本说明书实施例中,可以按照日志类型对日志进行分类,例如分为流水日志、登录日志等,并构建日志类型标识与数据库标识信息的映射关系库,所述根据所述每个日志对应的类型标识信息,确定每个日志对应的日志数据库可以包括:
[0126]
根据所述每个日志对应的类型标识信息,从映射关系库中查找与每个日志对应的类型标识信息对应的数据库的标识信息,从而确定每个日志对应的日志数据库。
[0127]
在本说明书实施例中,将日志进行分类存储,从而便于后续用户的查找。
[0128]
在本说明书实施例中,所述方法还包括:
[0129]
获取目标服务器的网际协议地址和端口信息;
[0130]
基于网际协议地址和端口信息,确定用户数据报协议地址;
[0131]
基于所述用户数据报协议地址,向所述目标服务器发送所述缓冲池中日志数据流。
[0132]
在本说明书实施例中,日志存储数据库可以设置在目标服务器中,目标服务器中包括数据中心进程;数据中心进程中设置有udp端口。日志上传过程中,可以提供复杂的容错和完备性功能,例如令牌缓冲,以及多路备份上报等。
[0133]
在一个具体的实施例中,例如令牌设置有三个待传日志,但是在日志上传过程中只传了两个,说明日志出现了漏传的情况,从而通过令牌缓冲可以及时发现日志上传过程中出现的问题,提高了日志上传的完备性,降低了日志上传的错误率。
[0134]
具体的,在本说明书实施例中,如图7所示,图7为日志数据流生成工具的框架图,其中日志可以为关键日志,工具对外提供的接口见“xml日志格式定义”,外部人员通过修改xml日志格式定义,然后将xml日志同步到游戏服务器,和数据中心(即存储关键日志的独立进程集),即可实现日志格式定义的更新操作。
[0135]“xml日志定义转换工具”,用于将定义好的xml文件转换为golang代码,其包括两个部分:“数据结构生成”和“数据接口生成”。“数据结构生成”会把xml中的struct节点转换为实际的golang struct类型(一种golang原生的数据格式),并且进行数据格式的映射,例如整型,字符串类型等。“数据接口生成”会生成golang struct的方法,例如tostring()方法,可以把一个具体的golang日志对象转换为流式数据。
[0136]
在服务器中,关键日志的生成,由具体的业务逻辑产生。本工具框架内,提供一个独立的关键日志上报模块,用于进行拥塞控制和远程连接管理。该模块通过udp的方式和数据中心通信,将关键日志实时同步,并存储数据库(mysql 1

n代表多个数据库表)中。在存储过程中,可以根据关键日志所属的类型对关键日志进行分类,预先构建日志类型与数据库之间的映射关系,并按照类别将不同的关键日志存储到对应的数据库中。
[0137]
具体的,在本说明书实施例中,在xml日志格式中,以struct节点作为一条日志的定义,每个entry节点代表一个具体的字段。修改xml之后,需要调用xml日志定义转换工具,将xml转换为golang代码,同步到游戏服务器项目中。同时,需要同步到数据中心,修改mysql的相关定义。xml日志的修改需要遵循数据库中数据的兼容性原则。
[0138]
在本说明书实施例中,将定义好的关键日志格式,直接转为golang原生的代码,包括数据结构和数据流转换接口。不使用外部的数据协议,降低了移植成本,减少了额外性能开销;采用udp协议上报轻量数据流格式日志,采用独立进程来进行关键日志接收和数据库存储。数据库储存的定义和原始文件定义统一,减少转义成本。将日志的生成、上报和存储
完全解耦,具有可移植性和可扩展性。在服务器运行时,不会直接读写xml文件,因此可以保证服务器高效的工作。
[0139]
由以上本说明书实施例提供的技术方案可见,本说明书实施例先确定日志的目标格式的配置信息;所述配置信息包括至少一个结构节点,每个结构节点包括至少一个入口节点;然后遍历每个结构节点中的入口节点,得到每个结构节点对应的入口节点集;再将所述每个结构节点对应的入口节点集转换成每个结构节点对应的目标编程语言的成员变量集;从而将定义好的日志格式转换成目标编程语言的成员变量集;再调用每个结构节点对应的目标编程语言的成员变量集,生成日志对象,将所述日志对象转换成日志数据流;从而不需要服务器直接读写初始的日志的目标格式,可以直接根据转换后的目标编程语言的成员变量集生成日志数据流,减少了日志定义格式文件转换过程中的人工干预,并提高了日志格式转换的准确率。
[0140]
本技术实施例还提供了一种日志数据流生成装置,如图8所示,所述装置包括:
[0141]
配置信息确定模块810,用于确定日志的目标格式的配置信息;所述配置信息包括至少一个结构节点,每个结构节点包括至少一个入口节点;
[0142]
入口节点集确定模块820,用于遍历每个结构节点中的入口节点,得到每个结构节点对应的入口节点集;
[0143]
成员变量集确定模块830,用于将所述每个结构节点对应的入口节点集转换成每个结构节点对应的目标编程语言的成员变量集;
[0144]
日志对象生成模块840,用于调用每个结构节点对应的目标编程语言的成员变量集,生成日志对象;
[0145]
日志数据流生成模块850,用于将所述日志对象转换成日志数据流。
[0146]
在一些实施例中,所述装置还可以包括:
[0147]
第一数据类型确定模块,用于确定日志的目标格式中每个入口节点的第一数据类型;
[0148]
第二数据类型确定模块,用于确定所述目标编程语言的成员变量集中每个成员变量的第二数据类型;
[0149]
第一映射关系构建模块,用于构建第一数据类型与第二数据类型的映射关系;
[0150]
映射关系存储模块,用于基于预设数据库存储第一数据类型与第二数据类型的映射关系。
[0151]
在一些实施例中,成员变量集确定模块可以包括:
[0152]
转换单元,用于将所述每个结构节点对应的入口节点集中目标入口节点转换成每个结构节点对应的目标编程语言的成员变量集中目标成员变量。
[0153]
在一些实施例中,所述转换单元包括:
[0154]
目标入口节点确定子单元,用于确定所述每个结构节点对应的入口节点集中的目标入口节点;
[0155]
第一目标数据类型确定子单元,用于确定所述目标入口节点对应的第一目标数据类型;
[0156]
第二目标数据类型确定子单元,用于从所述预设数据库中查找与所述第一目标数据类型匹配的第二目标数据类型;
[0157]
目标成员变量转换子单元,用于将所述目标入口节点转换为目标编程语言的目标成员变量,所述目标成员变量为第二目标数据类型。
[0158]
在一些实施例中,所述装置还可以包括:
[0159]
元标签设置模块,用于设置所述目标编程语言的成员变量集中每个成员变量的元标签;
[0160]
目标元标签确定模块,用于确定所述目标成员变量的目标元标签;
[0161]
第二映射关系构建模块,用于基于所述目标成员变量的目标元标签,构建目标入口节点与目标成员变量的映射关系。
[0162]
在一些实施例中,所述装置还可以包括:
[0163]
第一日志数据流存储模块,用于将所述日志数据流存储于缓冲池中;
[0164]
内存值确定模块,用于确定在预设时间段内,所述缓冲池中新增日志数据流的内存值;
[0165]
删除模块,用于当所述新增日志数据流的内存值大于预设阈值时,删除所述新增日志数据流。
[0166]
在一些实施例中,所述装置还可以包括:
[0167]
第二日志数据流存储模块,用于将所述缓冲池中日志数据流存储于预设日志数据库中。
[0168]
在一些实施例中,第二日志数据流存储模块包括:
[0169]
日志确定单元,用于确定所述缓冲池中日志数据流对应的至少一个日志;
[0170]
类型标识信息确定单元,用于确定每个日志对应的类型标识信息;
[0171]
日志数据库确定单元,用于根据所述每个日志对应的类型标识信息,确定每个日志对应的日志数据库;
[0172]
日志存储单元,用于将每个日志存储于所述每个日志对应的日志数据库中。
[0173]
在一些实施例中,所述装置还可以包括:
[0174]
信息获取模块,用于获取目标服务器的网际协议地址和端口信息;
[0175]
协议地址确定模块,用于基于网际协议地址和端口信息,确定用户数据报协议地址;
[0176]
日志数据流发送模块,用于基于所述用户数据报协议地址,向所述目标服务器发送所述缓冲池中日志数据流。
[0177]
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
[0178]
本技术实施例提供了一种日志数据流生成设备,该设备包括处理器和存储器,该存储器中存储有至少一条指令或至少一段程序,该至少一条指令或至少一段程序由该处理器加载并执行以实现如上述方法实施例所提供的日志数据流生成方法。
[0179]
本技术的实施例还提供了一种计算机存储介质,所述存储介质可设置于终端之中以保存用于实现方法实施例中一种日志数据流生成方法相关的至少一条指令或至少一段程序,该至少一条指令或至少一段程序由该处理器加载并执行以实现上述方法实施例提供的日志数据流生成方法。
[0180]
可选地,在本说明书实施例中,存储介质可以位于计算机网络的多个网络服务器中的至少一个网络服务器。可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、
只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0181]
本说明书实施例所述存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、功能所需的应用程序等;存储数据区可存储根据所述设备的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器还可以包括存储器控制器,以提供处理器对存储器的访问。
[0182]
本技术实施例所提供的日志数据流生成方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在服务器上为例,图9是本技术实施例提供的一种日志数据流生成方法的服务器的硬件结构框图。如图9所示,该服务器900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,cpu)910(处理器910可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器930,一个或一个以上存储应用程序923或数据922的存储介质920(例如一个或一个以上海量存储设备)。其中,存储器930和存储介质920可以是短暂存储或持久存储。存储在存储介质920的程序可以包括一个或一个以上模块,每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器910可以设置为与存储介质920通信,在服务器900上执行存储介质920中的一系列指令操作。服务器900还可以包括一个或一个以上电源960,一个或一个以上有线或无线网络接口950,一个或一个以上输入输出接口940,和/或,一个或一个以上操作系统921,例如windows servertm,mac os xtm,unixtm,linuxtm,freebsdtm等等。
[0183]
输入输出接口940可以用于经由一个网络接收或者发送数据。上述的网络具体实例可包括服务器900的通信供应商提供的无线网络。在一个实例中,输入输出接口940包括一个网络适配器(network interface controller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,输入输出接口940可以为射频(radio frequency,rf)模块,其用于通过无线方式与互联网进行通讯。
[0184]
本领域普通技术人员可以理解,图9所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器900还可包括比图9中所示更多或者更少的组件,或者具有与图9所示不同的配置。
[0185]
由上述本技术提供的日志数据流生成方法、装置或存储介质的实施例可见,本技术先确定日志的目标格式的配置信息;所述配置信息包括至少一个结构节点,每个结构节点包括至少一个入口节点;然后遍历每个结构节点中的入口节点,得到每个结构节点对应的入口节点集;再将所述每个结构节点对应的入口节点集转换成每个结构节点对应的目标编程语言的成员变量集;从而将定义好的日志格式转换成目标编程语言的成员变量集;再调用每个结构节点对应的目标编程语言的成员变量集,生成日志对象,将所述日志对象转换成日志数据流;从而不需要服务器直接读写初始的日志的目标格式,可以直接根据转换后的目标编程语言的成员变量集生成日志数据流,减少了日志定义格式文件转换过程中的人工干预,并提高了日志格式转换的准确率。
[0186]
需要说明的是:上述本技术实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0187]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0188]
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0189]
以上所述仅为本技术的较佳实施例,并不用以限制本技术,凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1