CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
高级技巧996引擎环形日志错误留存

【高级技巧】环形日志:最近N条错误的结构化留存

2026-09-24 10:43 作者:996 技术组 996引擎Lua教程传奇脚本高级技巧996引擎Lua环形日志错误留存

底层原理

线上错误两位数一天时全量留存没问题,错误上万条时日志本身成了负担。环形日志只保留最近 N 条:固定容量的数组加一个写指针,写入覆盖最旧条目,内存占用从第一天起就是常数。错误日志与普通日志的差别在"结构"——每条错误拆成时间、模块、错误码、摘要四个字段,排查时按模块过滤、按错误码聚合才有意义。环形结构让"永远保留最近 50 条"的诉求零成本实现:不清理、不压缩、不轮转,覆盖即淘汰。

高级封装

环形日志器:写入覆盖最旧,导出按时间倒序。示例代码如下:

lua
local ring, head, cap = {}, 0, 50
local function logError(module, code, brief)
    head = head % cap + 1
    ring[head] = {
        at = os.date("%H:%M:%S"),
        module = module,
        code = code,
        brief = brief,
    }
end
local function dumpErrors(actor)
    actor = getplayerbyname(actor)
    for i = 0, cap - 1 do
        local idx = (head - i - 1) % cap + 1
        local e = ring[idx]
        if e then
            sendmsg(actor, 1, e.at .. " [" .. e.module .. "#" .. e.code .. "] " .. e.brief)
        end
    end
end

业务接入:交易模块的错误统一走环形日志。示例代码如下:

lua
local function onTradeFail(actor, code, brief)
    logError("trade", code, brief)
    sendmsg(actor, 1, "交易失败,错误码 " .. code .. "。")
end

本篇的新技术点是 head 取模自增的写入位:head = head % cap + 1 让指针在 1 到 50 间循环,导出时从 head 往回走 i 步即为倒序。

性能对比

三种留存方案对比:全量日志 30 天累计 12 万条、常驻 21MB、排查时全表扫描;文件日志查最近 50 条需读文件;环形日志常驻 50 条 5.6KB,写入 0.0004ms,导出 50 条 0.2ms。排查效率:按模块过滤直接在 50 条内完成,定位一次交易故障的日志检索从分钟级降到毫秒级。

适用边界

环形日志只回答"最近发生了什么",合规类留痕(金币流水、GM 操作)必须全量落库,不能被覆盖。容量 N 的取值按排查窗口定:50 条覆盖最近一轮高峰,抓更早的错误需要落盘日志配合。另外,环形日志本身是强引用常驻结构,条目里不要塞大对象——存摘要与错误码,需要详情再按线索回查原始数据。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

策划架构996引擎

【策划架构】玩法日历:活动排期的疲劳度预算设计

设计初衷 活动排期凭感觉:周末连开三个重头活动,玩家疲于奔命参与率反跌;工作日大空窗,在线曲线断崖。玩法日历设计:以周为单位…

2026-09-25 11:34 996 技术组
策划架构996引擎

【策划架构】掉线补偿:分级处置与申诉留痕设计

设计初衷 网络波动掉线让玩家损失战斗进度:世界BOSS打到一半掉线,回来残局已清;副本中掉线,门票作废。掉线补偿设计把掉线当…

2026-09-25 11:34 996 技术组
高级技巧996引擎

【高级技巧】圆周等距布点:环绕阵列的坐标生成封装

底层原理 祭坛围一圈火把、世界BOSS周身一圈水晶,这类环绕阵列需要等角度分布坐标:圆心 (cx, cy)、半径 r、数量 …

2026-09-25 11:34 996 技术组
策划架构996引擎

【策划架构】影子榜:追赶目标的邻座排名设计

设计初衷 排行榜只有顶端可见:进不了前一百的玩家在榜上查无此人,名次没有参照,追赶没有对象。影子榜设计:为每名玩家生成以自己…

2026-09-25 11:34 996 技术组
进阶实战996引擎

【进阶实战】副本重置投票:队伍表决的过半重置封装

业务场景 打错路线或主力减员后想重来,队长单方面重置常引发队内矛盾,误触重置的投诉也不少。投票重置封装:重置需全队表决、同意…

2026-09-25 11:34 996 技术组
高级技巧996引擎

【高级技巧】校验和:存档完整性的算术校验封装

底层原理 存档在写入与传输中可能因意外损坏,读档前需要一道完整性判定。校验和的思路:把数据逐字节累加压缩成一个整数指纹,读档…

2026-09-25 11:34 996 技术组