00:00
大家好,欢迎来到自己教育课程的学习,本系列课程呢是自学教育的第一季,从零开始搭建游戏服务器,本节课呢是第11节,给大家讲一下我们日志库两个知识点啊,一个是我们社区的资源,第二就是我们的一个核心内容。第一个知识点呢,就是我们,呃,我们社区的一个订阅号,大家关注一下,这有小福利啊,就是大家可以回复客服获取我们助教的一个微信。我们所有的课程的通知呢,都会在我们微信微信群当中通知啊,大家最好是加一下我们助教的微信,之后呢,让我们助教把你拉到我们的一个微信群里面。好,那我们正式开始。我们回顾一下上节课的内容,上节课我们给大家呃调试了一下我们呃H5的客户端和我们的服务器的一些呃消息的一些流程情况,已经调试调试OK了,对吧。呃,流程上的话,我们看一下我们在这里。其实在这个里面呢,我们给大家说一下呃。它返回是接森格式的,但是呢,它有一个做了一个处理啊,相当于在这里面呢,我们。
01:06
做了一个BASE464的处理啊,BS64的是在我们S编码的时候呢,是做了一个相当于一个类型的一个转换,一个一个序列化的操作。比如在。在我们给他说一下,在那个。这个函数下面。我们是做了一个一个操作啊,大家一定要。别到时候有学员可能在编码的过程中,测试客户端的时候发现不对,诶说斌哥这儿你怎么跟你。跟你说的一个不一样啊,我们接收到的是一个贝斯64的信息,对吧,对的,你接收贝斯六信息是对的,我这给大家看一下。呃,我们上节课的H5客户端,你看其实这个就是我们接收到的,我们发送过来的一个BASE64信息。就H5客户端,而在这里呢,你看这是斌哥处理的,斌哥处理的一共是在这里面获取到我们电子信息,电子信息获取到之后呢,我们通过一个贝斯就是转码。
02:07
一个序列化的一个反序列化操作之后呢,把我们的一个信息打印到,打印到这个我们上面过来,你看这是我们这条信息,也就是说你在H5客户端处理的时候呢,一定要做一个base斯64的一个转换,这里面base斯64的,呃,第三方包呢,我不是第三方包JS的,呃,解析文件呢,我这里已经,呃是之前写的,大家如果有需要的话呢,就在微信群里面跟我们说就可以了。我这里呢,就会单独在微信群里给大家发出来。好吧,大家最好去,嗯实现一下接到的时候是贝斯64的,所以说这块呢,嗯,大家接到的时候呢,有学员可能现在没测呢,测的时候就会发现这个问题啊好,那我们来继续来讲今天的内容,今天给大家讲个知识库,之前给大家说了一下,就是我们在服务游戏服务器开发过程中啊,我们不可能。按照这种方式啊,按照标准库的fmt的一个方式去打印这种这种操作,因为首先呢。
03:06
它是输出于终端的,因为我们服务器的话是一般都是在后台运行的,特别是Linux服务器啊,在Linux平台的时候。对吧,应四系统的时候,那么我们的所有的输出信息全部是在后台你看不到的,对吧,你所有这个fmt的不起任何作用的,所以说我们必须加个日志。通过日志写到定时写到我们的磁盘磁盘上之后呢,我们发现错误的时候,可以根据日志的一些流水的情况呢,去打去查找我们的错误。这是服务器开发最基础的一个要求啊,也就是说你必须要有一个。系统化的日志输出,日志的输出系统啊,我给大家说一下。在这里给大家讲一下啊。也就是在服务器开发过程中啊,一定要有一个标准的。标准的是吗?
04:00
Log输出的。不只是我们游戏服务的,你像其他的微服务啊,像所有的都是靠我们日志必须有的,比如流水日志啊,还有一些错误日志啊,对吧,所以说这块呢。是对于全部是有的日志系统呢,这块有两个可以实现,我给大家举两个,一个是自己。自己实现一个。或者是用我们给大家推荐的谷歌的。J那个一个G那个的。日志系统。我在最开始写了一套我们服务器的时候呢,是我自己写了一套,但是发现性能的话很低。我写了一个,就我自己录了一套,就一个函数,因为我当时,呃,怎么说呢,我当时写了斌哥写的时候就一个函数实现了,就是一个磁盘,就把把我们字符数据作为拼接直接写到我们磁盘上去,你觉得大家这样操作会不会影响我们性能啊。100%会影响我们性能的,因为对吧,你像你字符串拼接,首先在存在一个问题,你日其实对于我们服务器来说,特别是高并发的时候,你一个日志来输出的话,其实本身就是很大的一个问题啊,它占占用我们的一个逻辑IO处理的话,时间上呢,至少在十毫秒。
05:18
最长的话,你要自己写的话,自己写可能比他还要长一点,你用知识库的话,比如g log的话,可能稍微好一点啊。它本身就是一个。一个逻辑处理相当于,所以说。嗯,建议个人建议啊,我个人建议的话,凭我的经验呢,我建议大家就是用我们log。建议,因为它是这样子的,它是当你呃可以它有一个flash,也就是接到个flash,它是所有的所有的日志系统呢,可以缓存到我们内存当中去,当你想要输出的时候,直接接到点flash,用它的方法就可以把我们的。日志系统全部日志的内存的数据全部刷到我们磁盘上去,这点有什么好处呢?就是不用频繁的IO操作,磁盘IO操作对于我们服务器性能呢,可能会呃提升不少。
06:06
那同学们也就问了,那说那内存不会增加吗?其实这样的话,呃,你觉得磁盘O来操作的话,其实呃对于我们性能影响大一点,还是我们的呃内存的。增加影影对我们性能影响大,如果您内存足够大的情况下。对吧。所以说而且刷日志的话,我们可以在凌晨的时候啊,比如玩家不在线,或者玩家比较少的一个时间段里面直接刷就可以了,对吧,那个磁盘O操作就和你玩家在线就不是一个从不是一个量级的,因为你玩家在线的时候,他做每个操作都会执行逻辑,逻辑的话你都会有日志嘛,这样你做。做spao操作的话,你的网络性能,包括各方面服务性能肯定会下降的,对吧。理解了吧,好,OK,那我们就开始给大家看一下,我们这节课主要给大家怎么增加我们的日志第三方包啊。呃,第三方包的话是我之前项目的,我在,呃,当时我在去it里面给大家看一下。
07:04
顺便给大家说一下,去哪里去查找。在我们的。在我们整个的。这是我们社区的李明。嗯,没有,那我们看一下,应该是我们去接梯。去搜一下。好,这是谷歌的log。嗯,这个也是可以。Go语言的嘛,那我们就用它就可以了,它有多支持多个多个多种语言啊和C加加的。哎,我这个没付款吗,我看。这个很简单,就几个函数,我们。加个星级OK,诶这个我没有好,那没有那直接拿过来。
08:04
大家同样去我们,呃,J上面去找一下,找一下就可以了。性能方面是我测试过,我项目一直在用这个也嗯是没什么问题的,好那么这样子,我们把大家去我们JT上去下来之后呢,我告诉大家怎么使用啊。好,我们去我们的一个项目里面,把我们的日志系统打出来。这样子我们放到我们的。给大家讲的工程的下面。好,我们直接。粘贴就可以,OK,这样子就我们。拿到我们这里面来了,那好,我们下面就把我们的git,把我们的glog呀,知道要包含今天可以。这大个包含的话是很简单的,呃,直接。它本身在我们工程目录下。
09:03
我不知道大家有没有新手啊,我觉得后面的话应该会有新手的,大家一定要,呃,就是。有什么问题啊,或者有什么。对吧,可以。可以在我们群里问的都是可以的,嗯,这个是没什么没什么问题的。之后呢,我们给大家讲一下我们的g log的一些。你操作。好,那我们正式大家开始,首先呢,在我们的主函数里,在我们的慢函数里面是呃,是保存一下,嗯。哦,这个是在我们的逻辑函数里面,那我们先去主函数里面,因为我们需要在主函数里面做一个事情,大家是什么事情。猜猜。也就是我们的一个日志的一个初始化系统啊,我们在这里面要加一个。Fun CI int,大家知道这个int还是会自动调用的,它会在我们一些变量初始化呢,像呃全局变量啊,初始化之后呢,像cost一些初始化之后呢,它会直接调用我们I函数,就不用去调用完了之后呢,是我们慢的一个顺序,大家知道这个逻辑,这个调用顺序吧,如果不懂的话去群里问我,这个是比较基础的。
10:17
就不给大家过多讲了,好,我们继续啊,这是初始化函数。初始化函数,OK。说实话,那么我们,呃,给大家我看,嗯。初始化的话,那么我们就先要。这里面有一个标准,也就是说呢,我们要做两个事情,也就是说在初始化的时候呢,我们要按照我们g log的标准,把我们的一个什么,把我们的那个日志系统日输出的,输出的一个,呃什么呢,输出的一个路径啊,还有一些呃,初始化配置啊,全部要设置,设置好那么好。
11:08
在正常情况下呢,我们执行glog的标准是这样子的,给大家说一下,也就是F,假如这个F是我们so吧so.exe那么它输出的号命令行执行的是什么样的呢?Glo。不是log往后面呢,是我们DRDR就是我们文件夹,文件夹呢,我们可以认为是什么,当前文件夹可以吧,当前文件夹,那么后面呢,就是我们的V一个什么。一个级别就是我们服务我们日志的一个输出到一个等级是怎样的算对吧,那么在我们那个正常的程序当中啊,给大家备注一下,这样好操作一点啊。这是那个命令啊,命令的操作。命令的执行。这时候在我命令行。
12:02
那么我们在那个,我们的一个什么呢?在我们的一个。程序当中呢。程序。程序当中怎么去执行呢,程序当中执行呢,哎,程序当中。程序当中执行呢,是这样子的,程序当中执行呢,我们先用flag,也就是我们正常的一个。Flag包也就是我们诶。Flag。好,我们把它包上去,Flag呢,第一个就是我们set一个,它有个方法,Set什么呢?Set也就是我们第一个我们要怎么日志写文件的同时呢。设置个标志位啊,标志位是这样子的。标志为我这下拿过来,它是代表什么意思,大家一个讲他是代表呢,我们是否。写日志文件的同时呢,输出到我们控制台文件,明白了,也就是这个输出的控制台呢,就跟我们正常打日志是一样的,打打这个看。
13:01
这个输入到控制台嘛,是一样的,如果你这为为false的话呢。它默认的话被false的话就不会输入到空白,只会打日志,但是呢,我们。怎么?我们是要打出来的,也就这标志给大家说一下,它的一个方法就是。日志。写入。文件的。同时呢,怎么。输出。叔叔到。Std的一个error就是输入到我们的控制台就可以了。这是我们其中一个设置的标志,那第二个呢,就是我们给大家说一下我们日志保存路径,也就是我们在执行命令的时候也要执行那个码,那好,我们同样是set。但是那个呢,但是我把它复制一下。这个这个就变了,这块是我们的一个什么,我们把它拿过来,其实就这个参数。
14:00
Log第二。它呢,就是我们放在我们的,那我们放在我们当前目录那个目录下。可以吧,这个没问题吧,这个是代表什么。这个代表什么东西呢?就是代表的我们日志文件保存目录啊,日志文件的保存的目录,OK,大家理解了吧。哎,这个SS怎么经常出来啊这个号。好,那么下一个标置位呢,就是我们一个配置什么输出一个等级,就是我们V3,那么V3在我们程序里边怎么做呢?我们还是复制一下。V3呢,它等级呢,我们直接同样呢V就可以了,也就是按照命令去执行就可以啊,它等级呢,我们等于三就可以直接它参数呢就是3OK。就是日志是吗?配置。配输入等级配置怎么可以写?配置日志。
15:01
输出的等级。理解了吧?OK,那么这个还没有执行,我们最后呢,要执行一个。Flag另外一个方法,Flag什么?好,这个方法呢,它有一个方法是我们的输出,也就对我们一个上面的所有的这个设置文件做一个解析,那么叫什么。这个在其他的语法,其他的那个程序里面也有,就是对于我们整个项目set的一个解析就可以了,那这样子我们日志系统其实就配置完了,所以说大家在编程过程中啊,包括在我们实际开发过程中啊,一定要会执行命令的时候,把我们命令转化成我们实际开发的编程编程的代码就可以了。知道了吧,这两个是相等的。那么大家发现一个问题,没有什么问题。我们这日志有没有log,所以我们要建一个,他会不会建,那好我们就测试一下呗,那么好,那我们就用一下g log g log的话我们在这里,我们在前面打印吧。
16:05
在这里打印就可以,那我们就直接这。Lo。点衣服。看会没有错啊,我们编一下。哦,那个这边应该有问题,那边没有用,那边刚才在我们逻辑层,我们包含了一下,没有那边会报错啊,等会看一下诶。你看吧,他就那我们怎么办,大家觉得怎么办,我们直接。这是什么意思?大家记不记得?有没有印印象或者什么样?
17:01
他说什么了?没有这个包,那我们先去掉吧,防止它出错是吧,不管他。日志系统呢,对于我们来说是比较重要的。其实。OK,那我们看一下我们执行没有,编译好了之后呢,我们把它执行一下,看到我们的输出没有。大家看到没有go语言社区,那么我们看我们的。当前目录下有没有这个文件啊,看大家看有没有日志啊,日志出来没。没有实施啊,那怎么办?那这样子我们。为了方便一点,我们把它什么晕倒一下。你再重新来一下。
18:01
说什么,没有什么。隐藏。Cold。我来再试编一下。没有输出啊,大家看到没,是什么原因,大家知道吗。大家你看我们执行的时候,他没有日志啊,正常应该会有日志才对,对吧,你执行一下。是没有的,为什么没有?那我给大家说一下,就是刚才我们在设置的时候,大家看到没有,我们是默认是的嘛,输出到我们当前目录的log下,那下面没有我们去建一个就是在在我们Windows下面啊,它这没有权限建的,那我们这。需要建一个日志系统,那我们再执行一下。呃,这样子吧,我们直接执行就可以。好,我们去我们logo下面看看,大家看没有,已经打出来了。这是我们的,你看这是我们打印的,呃,打印我们的一个什么,创建的一个信息是吧,那么这样子,你看我们这个info里面是什么。
19:08
Dialog。Message值吗?最后一行对吧,现在是没有的,但是为什么没有呢?来,我们再给他编一下,让它停掉。听到我们看有没有好吧。诶,还是没有,哎哟,大家疑问了,我们之前打的一个勾浪云社区怎么没出来啊。对啊,为什么没出来,这是g log g log的一个一个特点了。也就是说在。呃,在这里加就可以了,比就是你想输出输出到我们磁盘上IO操作呢,必须有个操作。它有个内置函数叫什么go。刷新一下,那我们试一下的。比如在我们服务器停掉之后呢,我们要刷新一下,看它会不会出来。
20:05
这个也就是我们我们的日志的一个g log的一个主要的一个特点在这里啊,那我们把这两个删掉,能删掉吧,应该。应该没人在用,应该可以删掉,OK。好,我们再执行一下。好,还是这两个我们看到没有过量语言社区还是没有的,对吧,还是打印我们一个什么。一个版本的信息啊,那好,那我们把它停掉呗。我这种停掉行不行啊。没还是没出来。那么我们就把这样的信息应该它是停掉是不行的,我们把它夹在这里看一下呗,是吧,看能不能能不能出来呗。我们再运行一下。编一下,先编一下。因为你代码改了嘛,你肯定要编译一下之后才能执行的。
21:01
记到看特点没有,这有一个时间的错误的一个,包括在多少行都可以打印出来,所以说这个对于我们后面。后面的一个什么操作啊。哦,这是出来一个。大家看没有打印出来了吧,理解了吧,也就是说我们要想把我们的数据刷新到我们磁盘上来说呢,必须要用一个函数,也就是log flash flash。刷新嘛,Flash刷新一下。这个日志是比较完善的,大家可以看它的一个呃,一个组合情况啊,包括时间这一块,还有看吗?日志形式到多少行啊,全部打印出来了,这是一个时间戳嘛,对吧,时间。这是我们要打印的信息,同时呢,呃,这是我们打印info在g log里面呢,一共是大概就是我们,呃。目前而言啊,我跟大家说一下。就是说我们日志系统呢,可除了除了info之外呢,我们还支持另外两种,也就是我们。这毕竟是谷歌出的啊,大家不要觉得很low啊,除了海尔还有什么?还有我们的一个警告信息。
22:06
第一个字母大小。还有一个什么,大家大家肯定知道啊,哎,我忘了问下。还有什么,还有我们的一个什么I信息啊,I肯定是要有的,I是I的级别,可能是我们服务器中最不想看到的,对不对。理解了吧,大家这三种,这三种时候我们运行一下,看一下有什么大家会要使用效果啊。嗯,这我们再编译一下。好,我们再执行一下,我们把这个日志里面删掉,以可能影响我们对吧,这个先关了,要不然你删不掉啊。删掉。兵哥的基本。这波操作是不是比较溜了。
23:04
这个我用了很久了,也是。一直没有换其他的感觉。嗯,选型嘛,技术选型就是这样子,大家看到没有,我们来看一下。看到没有警告信息,In error全部出来了,警告error。啊,理解了吧。OK。大家后面写的时候一定要把它刷新到我们的flash,刷新一下就可以了,OK。这今天是我们讲给大家讲日志系统啊,日志系统呢,我们先说到这里,那么我们其实剩下的工作内容呢,就是说把我们目前有的全部换掉,也就是说把我们。MMT的全部换掉,全部换成我们接到的信息,那么我们看一下这有一个,那我们要换成大家看error嘛,那我们肯定换成error信息对吧。这个是没毛病吧,对吧,我们来看一下其他逻辑。
24:02
其他逻辑里面这个FT也要去掉。去掉呢,我们。呃,我们看你从上面来这个也是一个I信息。I信息真的是我们服务器最不想看到的一个信息,这个对吧,解析失败,这个肯定也是。这是反射,那这个是打印的。呃,这个打印呢,我们就用。Info。所以架构大家在后面,不管是你做,呃做什么类型的,你在你在考虑那个。考虑后面的延续性的时候,一定要在提前把自己的技术,那个技术站,包括一些预言的东西一定要做好,要不然你后面。后面的话你是没办法做的,因为你这你比如说这个东西,我们现在这个日志系统,我们改现在是比较好改的,如果你做完了都已经做了,直接替换也可以啊,虽然说有很多方式方法。
25:06
但是对前期我们就可以把后面的隐患直接降到最低,那是对整个项目啊,对对吧,还是比较负责的人的。好,那这个就是error了。L信息,真的L信息的话,如果你经常打印出来,我觉得就。不是逻辑问题,就是处理上真的有问题啊。大家都觉得什么东西,我们这还没有包含进来是吧,那诶。那我们。包含一下。就可以了。好,那我们看其他了,其他应该是没有没有才对。哦,这个这个这个里面也有,那我们把它包含进来去掉。OK。好,那我们把相应的全部改了,那我们这个要是L信息。
26:00
这是我微信的,微信的。授权那里的。AO信息。警告信息的话。我在实际过程中用的也不是很多,因为查的查问题的话,只有这个error或者是那什么了。或者说我们正常流水的信息是吧,流水的一个数据啊。流水日志吗?好,我们编一下,看过了没有?没有用,那我们看一下这是没有定义,那我们把这个。这是什么?这个是info呗。吃饭了。还有哪个?这个也是,这个也是流水的日志,流水的这个其实不没必要了。这个。打印一下吧,后面我们去掉。
27:02
还有哪个,还有这边有一个吗?哦。几何是吧,那。这个是info。啊,编译一下应该没问题了,应该。日志系统对于我们后面查错是很关键的一个。OK,没问题了,已经OK好,那今天我们这是系统加完了,所以说大家在那个回顾一下,给大家说一个一个内容,也就是说呃,大家首先在不管做什么事情的时候,特别是编程过程当中。一项新技术似的,或者引入一个新的第三方包的时候呢,大家一定要先去测试一下,包括用它命令怎么测试啊,之后呢,你再去转我们的一个程序代码就好好很多,要不然的话你会踩坑的。知道了吧。你后面会理解的。后面如果你做的项目多了,你可能忙不过来,或者你就想想抄一些近道,你就会发现这个问题很就会发现了,对吧。
28:08
你本来你直接想写,但是有些发现一直日志不出来什么怎么回事啊,也不知道,去网上搜了很多资料也是对的呀,对吧。但是为什么没有没有出来,可能没有去没有去做呀,或者这个。就什么没有去,呃,输出啊,没有去我们FLY一个标志位,标志的一个信息啊等等的。好,呃,那我们本节课就给大家讲完了,我给大家说一下我们下节课啊,下节课我们给大家讲可能就是呃,配置网络端口,配置网络端口呢,是在。嗯,我们这里大家看到没,我们先写死的,完了下课呢,我跟大家讲一下,就是动态,动态传入那个我们这个端口端口信息。就是再讲一下外网部署,外网部署加端口动态配置就可以实现了,我们那个不用不用每次啊改端口啊,或者我们后面加加物理机的时候啊,就不用,比如我们加加那个game server做一个集群的时候呢,你大家觉得写死的话,你启动还是288,你肯定启不启动不起来了,对吧,端口被占用了嘛,我们下次我们下载课就是规避这种情况,就是让集群呢,至少你开N多个,只要端口够用的话,你可以开N多个。
29:22
我吗?可以一从一开始,咱们举个不恰当例子,可以从一开到65356534啊,6535可以,6535都可以。对,你要是能开得起就可以。OK,那我们本节课就到这到这里了,我们我们下节课再见。
我来说两句