Closed ych411521894 closed 1 month ago
是因为开了2个机器人服
这个打印的意思是,这个号已经在匹配中了
噢好的感谢大佬。大佬能不能做后面能不能做一个发布项目的sh,文件夹里运行相关文件和目录,因为现在部署其实不是很方便,就是发布版本里其实只需要skynet可执行文件,然后目录有service里面有skynet和skynet_fly+开发者自己写的,cservice,luaclib,lualib,都是如此,然后开发的时候只需要在这个发布版本里面开发,如果skynet或者skynet_fly有更新,那么重新编译发布项目覆盖原来的每个目录下的文件即可
这个建议不错,后续skynet_fly可以考虑一下
大佬,还有它每次重启文件会切割log文件吗?我看代码都执行切割log文件了,也打印生成的文件了,但是我搜索了下那个文件,却不存在
现在是设定一个时间点切割,不指定默认每天0点切割,重启切割可以考虑加进去
我是游戏开启之后,延时10秒,进行切割,然后就报错了 skynet.timeout(1000,function() rotate() backup() end) [:00000016][20240915 13:19:06 20][error][logrotate_m][../../skynet_fly/module/logrotate_m.lua:24]"os_execute cmd err " " /usr/bin/pkill -HUP -f skynet.centerserver_config.lua" "exit" 1 [:00000016][20240915 13:19:06 20]lua call [0 to :16 : 2 msgsz = 0] error : [31m../../skynet_fly/skynet/lualib/skynet.lua:990: ../../skynet_fly/skynet/lualib/skynet.lua:451: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: attempt to index a nil value (local 'file_info') stack traceback: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: in for iterator 'for iterator' ../../skynet_fly/module/logrotate_m.lua:103: in upvalue 'backup' ../../skynet_fly/module/logrotate_m.lua:153: in upvalue 'f' ../../skynet_fly/skynet/lualib/skynet.lua:374: in function <../../skynet_fly/skynet/lualib/skynet.lua:373> stack traceback: [C]: in function 'assert' ../../skynet_fly/skynet/lualib/skynet.lua:990: in function 'skynet.dispatch_message'[0m
大佬,还有经过使用,这个配置确实有点麻烦,特别是增加节点和减少节点太麻烦了,要改很多地方,然后漏了,就会有日志提示错误说找不到节点
我做了一个适合自己的用法就是把logs全部都放到根目录下logs下然后名字就是服务器的节点名.log,当然对于运维肯定是无所谓看后台,开发过程中看后台还是太慢了,开发的话还是直接看文件比较快,所以就希望游戏启动的时候日志就切割,这样我们打开文件就知道是不是启动成功了,在一个文件夹里一下就点完了,就知道哪个服务启动失败报错了,就去修改了
我是游戏开启之后,延时10秒,进行切割,然后就报错了 skynet.timeout(1000,function() rotate() backup() end) [:00000016][20240915 13:19:06 20][error][logrotate_m][../../skynet_fly/module/logrotate_m.lua:24]"os_execute cmd err " " /usr/bin/pkill -HUP -f skynet.centerserver_config.lua" "exit" 1 [:00000016][20240915 13:19:06 20]lua call [0 to :16 : 2 msgsz = 0] error : [31m../../skynet_fly/skynet/lualib/skynet.lua:990: ../../skynet_fly/skynet/lualib/skynet.lua:451: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: attempt to index a nil value (local 'file_info') stack traceback: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: in for iterator 'for iterator' ../../skynet_fly/module/logrotate_m.lua:103: in upvalue 'backup' ../../skynet_fly/module/logrotate_m.lua:153: in upvalue 'f' ../../skynet_fly/skynet/lualib/skynet.lua:374: in function <../../skynet_fly/skynet/lualib/skynet.lua:373> stack traceback: [C]: in function 'assert' ../../skynet_fly/skynet/lualib/skynet.lua:990: in function 'skynet.dispatch_message'[0m
这个功能我觉得加在log_service比较好
这个你有更好建议,可以提出来。 我觉得这个可以在项目架构稳定后,配置有规律性了,再去增加批量处理脚本来处理这种重复性工作
我做了一个适合自己的用法就是把logs全部都放到根目录下logs下然后名字就是服务器的节点名.log,当然对于运维肯定是无所谓看后台,开发过程中看后台还是太慢了,开发的话还是直接看文件比较快,所以就希望游戏启动的时候日志就切割,这样我们打开文件就知道是不是启动成功了,在一个文件夹里一下就点完了,就知道哪个服务启动失败报错了,就去修改了
建议改log_sevice,可以在服务,启动时在之前的日志文件重命名下
好的,谢谢大佬。。。。。
local function renameAndMoveFile(src_path, src_filename, tag_file_path) local src_file_p = src_path .. src_filename local sourcefile = io.open(src_file_p, 'r') if not sourcefile then return end sourcefile:close() -- 获取当前日期时间 local now = os.date("*t") local year, month, day, hour, min = now.year, now.month, now.day, now.hour, now.min local newName = string.format("%04d%02d%02d_%s", year, month, day, src_filename) local new_tag_file_p = tag_file_path .. newName local targetfile = io.open(new_tag_file_p, "r") if not targetfile then -- 不存在,则直接移动 os.rename(src_file_p, new_tag_file_p) else targetfile:close() -- 存在,则进一步重命名并移动 local newNameWithTime = string.format("%04d%02d%02d%02d%02d_%s", year, month, day, hour, min, src_filename) new_tag_file_p = tag_file_path .. newNameWithTime os.rename(src_file_p, new_tag_file_p) end end
我做了一个适合自己的用法就是把logs全部都放到根目录下logs下然后名字就是服务器的节点名.log,当然对于运维肯定是无所谓看后台,开发过程中看后台还是太慢了,开发的话还是直接看文件比较快,所以就希望游戏启动的时候日志就切割,这样我们打开文件就知道是不是启动成功了,在一个文件夹里一下就点完了,就知道哪个服务启动失败报错了,就去修改了
建议改log_sevice,可以在服务,启动时在之前的日志文件重命名下 就是我服务器一直跑,第二天自动切割文件也是报错的。 [:00000010][20240916 00:00:00 61][error][logrotate_m][../../skynet_fly/module/logrotate_m.lua:24]"os_execute cmd err " " /usr/bin/pkill -HUP -f skynet.hallserver_config.lua.load_mods_1.lua" "exit" 1 [:00000010][20240916 00:00:00 62]lua call [0 to :10 : 520 msgsz = 0] error : [31m../../skynet_fly/skynet/lualib/skynet.lua:990: ../../skynet_fly/skynet/lualib/skynet.lua:451: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: attempt to index a nil value (local 'file_info') stack traceback: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: in for iterator 'for iterator' ../../skynet_fly/module/logrotate_m.lua:103: in upvalue 'backup' ../../skynet_fly/module/logrotate_m.lua:147: in upvalue 'f' ../../skynet_fly/skynet/lualib/skynet.lua:401: in function <../../skynet_fly/skynet/lualib/skynet.lua:373> stack traceback: [C]: in function 'assert' ../../skynet_fly/skynet/lualib/skynet.lua:990: in function 'skynet.dispatch_message'[0m
是不是改了日志路径和文件名,对应切割服务的相关配置没改对,你可以用加速时间来快速验证,或者设置更短的轮换周期
local function renameAndMoveFile(src_path, src_filename, tag_file_path) local src_file_p = src_path .. src_filename local sourcefile = io.open(src_file_p, 'r') if not sourcefile then return end sourcefile:close() -- 获取当前日期时间 local now = os.date("*t") local year, month, day, hour, min = now.year, now.month, now.day, now.hour, now.min local newName = string.format("%04d%02d%02d_%s", year, month, day, src_filename) local new_tag_file_p = tag_file_path .. newName local targetfile = io.open(new_tag_file_p, "r") if not targetfile then -- 不存在,则直接移动 os.rename(src_file_p, new_tag_file_p) else targetfile:close() -- 存在,则进一步重命名并移动 local newNameWithTime = string.format("%04d%02d%02d%02d%02d_%s", year, month, day, hour, min, src_filename) new_tag_file_p = tag_file_path .. newNameWithTime os.rename(src_file_p, new_tag_file_p) end end
这个加好了,可以提个pr
是不是改了日志路径和文件名,对应切割服务的相关配置没改对,你可以用加速时间来快速验证,或者设置更短的轮换周期
我是改了,但是我又验证了,然后我重新git拉的版本,把切割时间改为1分钟一次,,也会有这个报错,具体不知道为什么获取文件夹的fileinfo获取不到
我做了一个适合自己的用法就是把logs全部都放到根目录下logs下然后名字就是服务器的节点名.log,当然对于运维肯定是无所谓看后台,开发过程中看后台还是太慢了,开发的话还是直接看文件比较快,所以就希望游戏启动的时候日志就切割,这样我们打开文件就知道是不是启动成功了,在一个文件夹里一下就点完了,就知道哪个服务启动失败报错了,就去修改了
建议改log_sevice,可以在服务,启动时在之前的日志文件重命名下 就是我服务器一直跑,第二天自动切割文件也是报错的。 [:00000010][20240916 00:00:00 61][error][logrotate_m][../../skynet_fly/module/logrotate_m.lua:24]"os_execute cmd err " " /usr/bin/pkill -HUP -f skynet.hallserver_config.lua.load_mods_1.lua" "exit" 1 [:00000010][20240916 00:00:00 62]lua call [0 to :10 : 520 msgsz = 0] error : [31m../../skynet_fly/skynet/lualib/skynet.lua:990: ../../skynet_fly/skynet/lualib/skynet.lua:451: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: attempt to index a nil value (local 'file_info') stack traceback: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: in for iterator 'for iterator' ../../skynet_fly/module/logrotate_m.lua:103: in upvalue 'backup' ../../skynet_fly/module/logrotate_m.lua:147: in upvalue 'f' ../../skynet_fly/skynet/lualib/skynet.lua:401: in function <../../skynet_fly/skynet/lualib/skynet.lua:373> stack traceback: [C]: in function 'assert' ../../skynet_fly/skynet/lualib/skynet.lua:990: in function 'skynet.dispatch_message'[0m
可以把配置填出来么?我有空看下是什么原因
我做了一个适合自己的用法就是把logs全部都放到根目录下logs下然后名字就是服务器的节点名.log,当然对于运维肯定是无所谓看后台,开发过程中看后台还是太慢了,开发的话还是直接看文件比较快,所以就希望游戏启动的时候日志就切割,这样我们打开文件就知道是不是启动成功了,在一个文件夹里一下就点完了,就知道哪个服务启动失败报错了,就去修改了
建议改log_sevice,可以在服务,启动时在之前的日志文件重命名下 就是我服务器一直跑,第二天自动切割文件也是报错的。 [:00000010][20240916 00:00:00 61][error][logrotate_m][../../skynet_fly/module/logrotate_m.lua:24]"os_execute cmd err " " /usr/bin/pkill -HUP -f skynet.hallserver_config.lua.load_mods_1.lua" "exit" 1 [:00000010][20240916 00:00:00 62]lua call [0 to :10 : 520 msgsz = 0] error : �[31m../../skynet_fly/skynet/lualib/skynet.lua:990: ../../skynet_fly/skynet/lualib/skynet.lua:451: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: attempt to index a nil value (local 'file_info') stack traceback: ../../skynet_fly/lualib/skynet-fly/utils/file_util.lua:40: in for iterator 'for iterator' ../../skynet_fly/module/logrotate_m.lua:103: in upvalue 'backup' ../../skynet_fly/module/logrotate_m.lua:147: in upvalue 'f' ../../skynet_fly/skynet/lualib/skynet.lua:401: in function <../../skynet_fly/skynet/lualib/skynet.lua:373> stack traceback: [C]: in function 'assert' ../../skynet_fly/skynet/lualib/skynet.lua:990: in function 'skynet.dispatch_message'�[0m
可以把配置填出来么?我有空看下是什么原因
没改啥配置呀。。。就似乎git clone下来,然后运行,把local function create_rotate(cfg) assert(cfg.filename,"not filename") local m_filename = cfg.filename --文件名 local m_rename_format = cfg.rename_format or "%Y%m%d" --重命名文件格式 local m_file_path = cfg.file_path or './' --文件路径 local m_limit_size = cfg.limit_size or 0 --至少多大才会切割 local m_max_age = cfg.max_age or 30 --最大保留天数 local m_max_backups = cfg.max_backups or 30 --最大保留文件数 local m_sys_cmd = cfg.sys_cmd --轮转时调用的系统命令
local m_point_type = timer_point.EVERY_MINUTE --默认每天改成分钟,没有其他了
load_mods.lua的配置呢?
logrotate_m = {
launch_seq = 1,
launch_num = 1,
default_arg = {
file_path = './logs/', --文件路径
filename = 'server.log', --文件名
limit_size = 0, --最小分割大小
max_age = 7, --最大保留天数
max_backups = 7, --最大保留文件数
sys_cmd = [[
/usr/bin/pkill -HUP -f skynet.logrotate_config.lua\n
]], --系统命令
}
},
你可以打印一下是什么文件没有file_info,我这边没试出来
for file_name,file_path,file_info,errmsg,errno in file_util.diripairs(m_file_path) do
log.info("logrotate_m info >>> ", file_name,file_path,file_info,errmsg,errno)
if file_name ~= m_filename and string.find(file_name,m_filename,nil,true) then
tinsert(back_list, {
file_path = file_path,
time = file_info.modification --最近一次修改时间
})
end
end
可以加下打印看看是什么文件,什么原因没有file_info
huahua132/skynet_fly@4b8b5e4 已处理file_info为nil的情况
好的大佬,我再试试
for file_name,file_path,file_info,errmsg,errno in file_util.diripairs(m_file_path) do log.info("logrotate_m info >>> ", file_name,file_path,file_info,errmsg,errno) if file_name ~= m_filename and string.find(file_name,m_filename,nil,true) then tinsert(back_list, { file_path = file_path, time = file_info.modification --最近一次修改时间 }) end end
可以加下打印看看是什么文件,什么原因没有file_info
打印的错误原因是找不到文件和目录,然后我看了下你全部的提交,主要问题是配置那里,分割文件的时候pkill -hup,路径错误了,少了.make路径
pkill -hub只影响信号发不发成功,不影响文件分割路径
打印的file_path,路径下有这个文件么
pkill -hub只影响信号发不发成功,不影响文件分割路径 hub信号发送如果不成功,好像会导致不会生成新的log文件,然后导致后面一系列的错误。我加上.make之后,就不会出现这个错误了
pkill -hup只影响信号发不发成功,不影响文件分割路径 hup信号发送如果不成功,好像会导致不会生成新的log文件,然后导致后面一系列的错误。我加上.make之后,就不会出现这个错误了
hup信号不成功只是不会创建新的日志文件,不影响其他的。出现错误的地方是因为没有获取到某个文件的详细信息
pkill -hup只影响信号发不发成功,不影响文件分割路径 hup信号发送如果不成功,好像会导致不会生成新的log文件,然后导致后面一系列的错误。我加上.make之后,就不会出现这个错误了
hup信号不成功只是不会创建新的日志文件,不影响其他的。出现错误的地方是因为没有获取到某个文件的详细信息 是不是因为hup信号没发射成功,日志还被进程占用,所以无法获取这个文件的详细信息,而hup信号成功后,创建出了新的日志文件就正常了?
pkill -hup只影响信号发不发成功,不影响文件分割路径 hup信号发送如果不成功,好像会导致不会生成新的log文件,然后导致后面一系列的错误。我加上.make之后,就不会出现这个错误了
hup信号不成功只是不会创建新的日志文件,不影响其他的。出现错误的地方是因为没有获取到某个文件的详细信息 是不是因为hup信号没发射成功,日志还被进程占用,所以无法获取这个文件的详细信息,而hup信号成功后,创建出了新的日志文件就正常了?
有这个可能性,具体还是要看errmsg和errno返回什么错误
pkill -hup只影响信号发不发成功,不影响文件分割路径 hup信号发送如果不成功,好像会导致不会生成新的log文件,然后导致后面一系列的错误。我加上.make之后,就不会出现这个错误了
hup信号不成功只是不会创建新的日志文件,不影响其他的。出现错误的地方是因为没有获取到某个文件的详细信息 是不是因为hup信号没发射成功,日志还被进程占用,所以无法获取这个文件的详细信息,而hup信号成功后,创建出了新的日志文件就正常了?
有这个可能性,具体还是要看errmsg和errno返回什么错误
返回错误就是没有这个文件,就是因为之前改名了,然后它去读取了不存在的文件,所以报错了
pkill -hup只影响信号发不发成功,不影响文件分割路径 hup信号发送如果不成功,好像会导致不会生成新的log文件,然后导致后面一系列的错误。我加上.make之后,就不会出现这个错误了
hup信号不成功只是不会创建新的日志文件,不影响其他的。出现错误的地方是因为没有获取到某个文件的详细信息 是不是因为hup信号没发射成功,日志还被进程占用,所以无法获取这个文件的详细信息,而hup信号成功后,创建出了新的日志文件就正常了?
有这个可能性,具体还是要看errmsg和errno返回什么错误
返回错误就是没有这个文件,就是因为之前改名了,然后它去读取了不存在的文件,所以报错了
这个过程是同步处理的,没有并发,迭代器怎么会返回一个不存在文件的路径,你用的是什么系统?
pkill -hup只影响信号发不发成功,不影响文件分割路径 hup信号发送如果不成功,好像会导致不会生成新的log文件,然后导致后面一系列的错误。我加上.make之后,就不会出现这个错误了
hup信号不成功只是不会创建新的日志文件,不影响其他的。出现错误的地方是因为没有获取到某个文件的详细信息 是不是因为hup信号没发射成功,日志还被进程占用,所以无法获取这个文件的详细信息,而hup信号成功后,创建出了新的日志文件就正常了?
有这个可能性,具体还是要看errmsg和errno返回什么错误
返回错误就是没有这个文件,就是因为之前改名了,然后它去读取了不存在的文件,所以报错了
这个过程是同步处理的,没有并发,迭代器怎么会返回一个不存在文件的路径,你用的是什么系统?
centos7.9,然后log里面warn文件系统也存在同样的问题,切割之后,应该是没有执行hup信号,所以没有生成重命名前的文件
pkill -hup只影响信号发不发成功,不影响文件分割路径 hup信号发送如果不成功,好像会导致不会生成新的log文件,然后导致后面一系列的错误。我加上.make之后,就不会出现这个错误了
hup信号不成功只是不会创建新的日志文件,不影响其他的。出现错误的地方是因为没有获取到某个文件的详细信息 是不是因为hup信号没发射成功,日志还被进程占用,所以无法获取这个文件的详细信息,而hup信号成功后,创建出了新的日志文件就正常了?
有这个可能性,具体还是要看errmsg和errno返回什么错误
返回错误就是没有这个文件,就是因为之前改名了,然后它去读取了不存在的文件,所以报错了
这个过程是同步处理的,没有并发,迭代器怎么会返回一个不存在文件的路径,你用的是什么系统?
准确来说是切割成功之后,hub信号没发送成功,那就没有文件,那file_info必定是没有的
hub信号不成功,第二次切割这里拿不到正常。 你一开始在这里报错,这里的文件夹遍历也会返回不存在的文件file_path么?
hub信号不成功,第二次切割这里拿不到正常。 你一开始在这里报错,这里的文件夹遍历也会返回不存在的文件file_path么?
这个我等下试验下,[:00000016][20240918 02:08:00 21][warn][logrotate_m][../../skynet_fly/module/logrotate_m.lua:107]"backup file can`t get file_info " "./logs/20240918_server.log" "cannot obtain information from file './logs/20240918_server.log': No such file or directory" 2 这个错误
./logs/20240918_server.log
这个文件真的不存在么,我这边试不出来
./logs/20240918_server.log
这个文件真的不存在么,我这边试不出来 文件存在,但是报错
把整个skynet_fly重新编译再试试看
重新编译过的我知道你改了lfs的接口。。
把整个skynet_fly重新编译再试试看
不过只要把make路径整对就好了
整对,这个warn也没了?
整对,这个warn也没了?
是的。
整对,这个warn也没了?
我觉得可能是有同步情况,切割文件是logrotate_m服务做的,而读写文件是logservice做的,有可能会冲突
在 Linux 系统中,两个程序同时对同一个文件进行操作时的行为取决于所执行的具体操作以及文件系统的特性。
情景描述: 程序 A 打开一个文件句柄,并对该文件进行写操作。 程序 B 在文件被程序 A 打开且正在写的情况下对文件进行重命名。 文件重命名与打开文件的关系: 在 Unix/Linux 系统中,文件名和文件内容是分离的概念。文件名是存储在目录中的一种符号,而文件内容是存储在 inode 中的数据。当一个进程打开一个文件时,它获取的是文件内容(inode)的引用,而不是文件名。
因此,你在重命名一个文件时,Linux 系统只是修改了目录结构中的文件名,而不会影响已经打开的文件描述符。已打开的文件描述符仍然会指向原始的 inode。
不会冲突的,logrotate_m只是对文件进行重命名
我跑示例中的logrotate,故意让hup信号失败,无法复现
那确实很奇怪。。。我只要做就会出现,我是在docker centos7.9下面跑的
00001d][20240915 00:12:52 82][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002032 [:0000001d][20240915 00:12:52 82][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:0000001d][20240915 00:13:08 67][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002212 [:0000001d][20240915 00:13:08 67][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:0000001e][20240915 00:14:02 03][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002273 [:0000001e][20240915 00:14:02 03][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:0000001b][20240915 00:14:16 85][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002360 [:0000001b][20240915 00:14:16 85][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:00000019][20240915 00:15:02 98][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002250 [:00000019][20240915 00:15:02 98][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:00000019][20240915 00:15:03 19][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020001800 [:00000019][20240915 00:15:03 19][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:0000001d][20240915 00:15:34 56][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002488 [:0000001d][20240915 00:15:34 56][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:00000019][20240915 00:18:17 23][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002454 [:00000019][20240915 00:18:17 23][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:0000001d][20240915 00:18:49 86][warn][room_game_hall_m][./hall/match/match_logic.lua:107]"do_match_game err " 15 "matching" [:0000001d][20240915 00:18:49 86][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "matching" [:0000001a][20240915 00:19:04 69][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002401 [:0000001a][20240915 00:19:04 69][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:0000001b][20240915 00:22:29 73][warn][room_game_hall_m][./hall/match/match_logic.lua:107]"do_match_game err " 15 "matching" [:0000001b][20240915 00:22:29 73][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "matching" [:0000001d][20240915 00:23:10 95][warn][room_game_hall_m][./hall/match/match_logic.lua:107]"do_match_game err " 15 "matching" [:0000001d][20240915 00:23:10 95][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "matching" [:0000001e][20240915 00:23:36 97][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002411 [:0000001e][20240915 00:23:36 97][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING" [:00000019][20240915 00:24:23 89][warn][room_game_hall_m][./hall/match/match_logic.lua:101]"do_match_game " 1999900020002292 [:00000019][20240915 00:24:23 89][info][room_game_hall_m][../../commonlualib/common/plug/hall_plug.lua:130]"handle_end err >>> " 10301 nil 15 "MATCHING"