一、一行代码拆解:seen[err] = (seen[err] or 0) + 1 —— 这一行把同类错误折叠计数:首个上报,后续只累加数字,1 万条同错只响 1 次附计数。
二、底层原理:折叠以错误签名为键计数:首见立即上报,重复仅累加;定时窗清零重报,既不刷屏也不吞错,运维从 1 万条里捞 1 条。
三、正确代码:
错误写法。示例代码如下:
local function onError(msg)
sendmsg(actor, 1, "告警 " .. msg) -- 同错刷1万条
end
正确写法。示例代码如下:
local seen = {}
local function onError(msg)
seen[msg] = (seen[msg] or 0) + 1
if seen[msg] == 1 then
sendmsg(actor, 1, "沙巴克告警 " .. msg)
end
end
local function flush()
for msg, n in pairs(seen) do
if n > 1 then
sendmsg(actor, 1, msg .. " 累计 " .. n .. " 次")
end
end
seen = {}
end
四、引擎验证:同一故障 1 万条告警压 1 窗:直报版刷 1 万条;折叠版首条加窗末汇总共 2 条,音量降 99.98%。
五、FAQ:问:不同错误会互相遮蔽吗?答:不会,签名各自独立计数,窗末逐类汇总。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏】 一、业务场景 帮会成员各自打怪缺乏交流,武艺高低无从比较。演武堂上线:每周开放演武比试,成员报名后按战力匹配对手,…
【语法】 一、隐蔽陷阱 1 到 n 的流水号少了一个要找出来:逐个比对要先排序;两两异或的思路又撞上 Lua 5.1 没有位…
【游戏】 一、业务场景 红名玩家被围剿后躲在安全区消极对峙,受害者投诉没有赎罪出口:红名只靠自然衰减,挂机数日才消退,恶性对…
【语法】 一、隐蔽陷阱 求一组字符串的公共前缀:拿短串整体比对省事,但串里混着中文时 取的是字节数,按字节切片会把多字节字符…
【语法】 一、隐蔽陷阱 把两个有序数组合并进第一个数组(尾部留足了空位):从前往后填会覆盖数组里还没比较的元素,数据被冲掉还…
【游戏】 一、业务场景 好友列表爆满加不进新朋友,散人玩家又舍不得删人:上限固定 50 人,没有扩展途径,也没有批量清理手段…