【OpenHarmony/HarmonyOs 】50hilog日志脱敏用户标识、消息内容与异常对象的安全输出 本文基于当前项目EntryAbility.ets、EntryBackupAbility.ets、LoginPage.ets、CloudDBService.ets、ChatPage.ets与ChatDetailPage.ets的真实日志代码展开。项目已经使用hilog记录启动、登录和 Cloud DB 状态但仍存在直接拼接 UID、公开输出完整异常、混用 console 与 hilog 等问题本文给出适合 HarmonyOS NEXT 项目的分级、脱敏与审计方案。一、为什么“只在本地打印”也需要脱敏移动应用日志可能出现在开发机调试窗口测试人员的问题附件自动化测试产物崩溃分析平台用户主动导出的诊断包团队共享的截图和文章。日志一旦离开变量所在进程就进入了新的数据流转链路。因此日志安全不能依赖“我不会把它发出去”这种假设。二、项目当前有哪些真实风险点登录成功后直接拼接用户 UIDhilog.info(0x0000,AGC,Login Success: user.getUid());登录失败时序列化完整异常hilog.error(0x0000,AGC,Login Failed: JSON.stringify(e));Cloud DB 初始化失败也输出整个对象hilog.error(0x0000,CloudDBService,Cloud DB Initialization failed: JSON.stringify(err));这些写法调试方便但异常对象可能包含服务地址、请求参数、账号标识或 SDK 内部上下文。三、%{public}s的含义必须认真对待项目启动日志中存在hilog.error(DOMAIN,AGC,AGC Init Failed: %{public}s,JSON.stringify(err));public表示该字段可以明文显示。它适合固定状态、公开错误码、非敏感模块名不适合未经审查的完整异常对象。敏感字段应避免输出确需诊断时也应先转换为安全摘要再决定公开属性。四、先定义日志数据分类1. 可以直接记录生命周期阶段模块名称固定操作名称公开错误码重试次数耗时结果数量。2. 必须脱敏后记录UID会话 ID消息 ID手机号邮箱文件名搜索关键词。3. 原则上禁止记录token密码验证码聊天正文私密日记正文精确位置联系人详情完整请求头签名密钥。五、日志应该记录事件而不是复制业务对象不推荐hilog.info(DOMAIN, TAG,%{public}s,JSON.stringify(user));推荐hilog.info(DOMAIN, TAG, eventlogin_successprovider%{public}suser%{public}s, providerName, maskedUid);结构化事件让日志更容易检索也减少“为了方便把整个对象打出来”的冲动。六、常用脱敏规则UID保留首尾少量字符1234567890abcdef→1234****cdef手机号13812345678→138****5678邮箱aliceexample.com → a***eexample.com会话与消息 ID可以记录不可逆摘要、短追踪码或首尾片段但不能借日志重新关联完整个人轨迹。内容类字段不要记录正文可记录长度、类型和是否为空message_typetextcontent_length32七、一个安全日志门面的设计方向推荐统一封装import { hilog }fromkit.PerformanceAnalysisKit; exportclassAppLogger{staticinfo(tag:string,event:string):void{ hilog.info(0x0000, tag,event%{public}s,event); }staticerror(tag:string,event:string, code:string):void{ hilog.error(0x0000, tag,event%{public}s code%{public}s,event, code); } }真实项目还可以增加耗时、追踪 ID、构建环境与采样策略。门面的核心价值是把安全规则放在统一边界而不是要求每个页面作者临场判断。八、异常对象不能直接JSON.stringifyJSON.stringify(error)常出现三个问题标准Error的关键字段可能不可枚举最终只得到{}SDK 异常可能带有大量内部字段未知对象可能包含敏感请求上下文。推荐提取允许名单统一错误码安全分类是否可重试操作名称内部追踪 ID。错误 message 只有经过审查后才能进入日志。九、日志级别如何划分debug只用于开发期流程细节不应依赖它完成生产诊断。info记录关键业务阶段成功例如初始化完成、订阅建立、页面加载完成。warn记录可恢复降级例如 Zone 暂不可用、使用 Mock 数据、即将重试。error记录操作失败但只输出安全错误摘要。fatal 级别应只用于导致核心进程或关键能力不可继续的情况。十、固定 DOMAIN 与 TAG当前项目普遍使用0x0000标签包括AGC、CloudDB、CloudDBService与testTag。建议DOMAIN 使用团队统一分配值TAG 表示稳定模块而不是临时调试名称事件名表示具体动作不把用户输入放进 TAG不使用testTag承载生产关键日志。十一、逐项日志安全核验检查项 1登录成功检查目标只记录登录方式和脱敏用户标识。常见反例直接拼接 user.getUid()。推荐动作使用掩码 UID 或短追踪标识。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 2登录失败检查目标记录统一错误码与阶段。常见反例JSON.stringify 完整异常。推荐动作先映射为安全错误摘要。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 3游客登录检查目标记录模式切换而非设备信息。常见反例输出完整上下文对象。推荐动作仅记录 eventguest_login。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 4用户同步检查目标记录新增或已存在的结果。常见反例输出用户对象和头像地址。推荐动作只记录 operation 与 result。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 5Cloud DB 初始化检查目标记录 Zone 名称是否成功。常见反例异常对象全部公开。推荐动作记录标准错误码与可重试性。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 6Zone 不可用检查目标使用 warn 表达降级。常见反例悄悄吞掉异常或打印敏感配置。推荐动作记录 fallback_usedtrue。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 7查询用户检查目标记录返回数量与耗时。常见反例记录每个用户 UID、昵称和手机号。推荐动作只输出 count 与 duration。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 8好友搜索检查目标记录搜索模式与结果数量。常见反例记录原始搜索关键词。推荐动作记录 keyword_length 与 mode。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 9聊天订阅检查目标记录建立、断开与重连。常见反例输出整个 snapshot。推荐动作记录 conversation_ref 与 count。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 10发送消息检查目标记录类型、长度和结果。常见反例记录聊天正文。推荐动作输出 content_length 与 msg_type。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 11接收消息检查目标记录批次数量。常见反例遍历打印每条内容。推荐动作使用 aggregate_count。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 12消息失败检查目标记录写入阶段与安全码。常见反例输出发送者、接收者和正文。推荐动作使用 request_trace_id。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 13附件消息检查目标记录附件类别和大小。常见反例输出本地绝对路径。推荐动作文件名脱敏且不记录路径。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 14位置消息检查目标只记录类型。常见反例输出经纬度和地址。推荐动作记录 location_permission_state。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 15联系人消息检查目标只记录功能结果。常见反例输出姓名和电话。推荐动作禁止记录联系人字段。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 16心情发布检查目标记录可见性和内容长度。常见反例输出心情正文与标签原文。推荐动作标签仅记录数量。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 17私密日记检查目标默认禁止内容日志。常见反例为了调试打印私密正文。推荐动作只记录 operation_id。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 18点赞操作检查目标记录对象短标识与结果。常见反例输出完整动态对象。推荐动作记录 target_ref 与 count_delta。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 19删除操作检查目标记录对象类型和结果。常见反例输出被删除内容。推荐动作记录 target_type 与 status。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 20路由跳转检查目标记录目标页面枚举。常见反例输出完整 params。推荐动作参数只使用允许名单。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 21启动能力检查目标记录生命周期事件。常见反例公开 Want 全对象。推荐动作仅记录 launch_reason。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 22窗口加载检查目标记录错误码。常见反例公开窗口对象或完整异常。推荐动作使用 code 与 stage。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 23备份恢复检查目标记录版本号的允许字段。常见反例JSON.stringify BundleVersion 全量。推荐动作提取公开版本字段。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 24鉴权检查检查目标记录 authenticated 布尔值。常见反例console.error 原始异常。推荐动作统一进入安全 logger。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 25Mock 降级检查目标记录 fallback 原因。常见反例把 Mock 用户详情全部打印。推荐动作记录 fallback_source。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 26重试检查目标记录 attempt 与 delay。常见反例每次打印相同完整堆栈。推荐动作首尾采样并聚合计数。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 27超时检查目标记录 operation 和 duration。常见反例打印请求体。推荐动作记录 timeout_ms。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 28取消请求检查目标记录取消原因枚举。常见反例把页面状态全部输出。推荐动作使用 reason_code。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 29竞态丢弃检查目标记录版本号差异。常见反例输出旧响应正文。推荐动作只记录 request_version。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 30空状态检查目标通常不需要 error 日志。常见反例无数据当异常打印。推荐动作用指标区分 empty 与 error。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 31权限拒绝检查目标记录权限名称和结果。常见反例记录用户精确位置。推荐动作只记录 permission 与 granted。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 32相机失败检查目标记录能力错误码。常见反例输出图片 URI。推荐动作路径和 URI 一律脱敏。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 33相册失败检查目标记录选择阶段。常见反例打印返回资源列表。推荐动作记录 selected_count。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 34网络状态检查目标记录连接类型粗粒度状态。常见反例输出 IP、SSID 或设备标识。推荐动作避免网络身份信息。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 35HTTP 请求检查目标记录接口代号与状态码。常见反例输出 URL 查询参数和 Header。推荐动作接口使用内部 action 名。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 36Token 刷新检查目标记录成功与失败。常见反例输出 token 内容。推荐动作任何级别禁止 token。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 37验证码检查目标记录发送结果。常见反例输出验证码。推荐动作仅记录 channel 与 result。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 38手机号检查目标默认不输出。常见反例完整手机号进入日志。推荐动作必要时使用 34 掩码。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 39邮箱检查目标默认不输出。常见反例完整邮箱进入日志。推荐动作必要时局部掩码。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 40昵称检查目标谨慎视为个人信息。常见反例直接记录昵称和搜索词。推荐动作用内部短标识替代。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 41头像检查目标不记录完整 URL。常见反例URL 可能携带签名参数。推荐动作仅记录 avatar_present。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 42UID检查目标统一掩码策略。常见反例不同页面各自 substring。推荐动作集中实现 maskIdentifier。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 43会话 ID检查目标使用不可逆短摘要。常见反例原值贯穿多条日志。推荐动作避免跨场景追踪用户。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 44消息 ID检查目标仅用于短期排障。常见反例永久明文保留。推荐动作设置短追踪 ID 与保留期。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 45设备 ID检查目标原则上禁止。常见反例作为“方便排查”长期输出。推荐动作使用临时会话追踪 ID。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 46应用版本检查目标可公开记录。常见反例与用户信息拼成单一字符串。推荐动作使用独立结构字段。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 47语言设置检查目标可记录语言代码。常见反例记录用户输入文案。推荐动作只输出 locale。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 48颜色模式检查目标可记录 light/dark。常见反例输出完整 Configuration。推荐动作提取 color_mode。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 49构建环境检查目标可记录 debug/release。常见反例输出签名配置。推荐动作严禁证书路径和别名。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 50异常 message检查目标经过允许名单审查。常见反例默认认为 message 安全。推荐动作优先使用映射后的用户无关描述。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 51异常 stack检查目标仅受控开发环境使用。常见反例生产全量上传。推荐动作裁剪、采样并限制访问。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 52SDK 错误检查目标记录 code 与模块。常见反例序列化 SDK 内部对象。推荐动作适配器提取安全字段。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 53未知错误检查目标使用 UNKNOWN 分类。常见反例把 unknown 强制转字符串。推荐动作保留追踪 ID供内部关联。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 54console 混用检查目标统一 hilog 门面。常见反例部分页面 console.error。推荐动作迁移到一致等级与格式。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 55字符串拼接检查目标使用格式化占位符。常见反例敏感值混入固定文案。推荐动作字段逐个决定公开性。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 56public 占位符检查目标只标记已确认安全字段。常见反例异常对象直接 public。推荐动作先脱敏再 public。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 57private 占位符检查目标仍遵循最小记录原则。常见反例认为 private 就可记录密码。推荐动作秘密字段完全不进入日志。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 58日志 TAG检查目标使用稳定模块名。常见反例TAG 包含 UID 或关键词。推荐动作TAG 只用于模块过滤。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 59DOMAIN检查目标使用统一合法域。常见反例所有示例长期保留 0x0000。推荐动作由项目配置集中管理。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 60事件命名检查目标采用稳定 snake_case。常见反例自然语言随意变化。推荐动作便于检索和指标聚合。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 61字段顺序检查目标同类事件保持一致。常见反例每个调用自定义格式。推荐动作建立 event、code、trace 顺序。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 62追踪 ID检查目标随机且不含业务身份。常见反例直接使用 UID 当 trace。推荐动作每次操作生成短期标识。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 63采样率检查目标高频成功日志按需采样。常见反例列表滚动每帧打印。推荐动作保留错误与关键状态。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 64去重检查目标重复错误按窗口聚合。常见反例弱网时刷屏。推荐动作记录 suppressed_count。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 65频率限制检查目标同一事件设置上限。常见反例订阅回调无限输出。推荐动作使用节流或计数。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 66保留周期检查目标按敏感等级设置。常见反例日志长期无限保存。推荐动作到期自动删除。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 67访问控制检查目标仅授权人员可查看。常见反例日志链接公开共享。推荐动作最小权限与审计访问。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 68导出诊断检查目标用户知情并可预览。常见反例自动上传全部日志。推荐动作二次脱敏后导出。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 69崩溃上报检查目标只包含必要上下文。常见反例附带最近聊天正文。推荐动作清理 breadcrumbs 敏感字段。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 70测试日志检查目标测试账号也按真实规则处理。常见反例测试环境关闭脱敏。推荐动作保持环境间策略一致。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 71单元测试检查目标验证掩码边界。常见反例只测正常手机号。推荐动作覆盖空值、短值和 Unicode。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 72集成测试检查目标扫描禁止关键词。常见反例靠人工检查输出。推荐动作自动拦截 token、phone 模式。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 73代码评审检查目标新增日志逐字段审查。常见反例只看日志等级。推荐动作检查必要性、敏感性与保留期。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 74发布构建检查目标降低 debug 细节。常见反例release 保留所有开发日志。推荐动作使用构建策略裁剪。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 75文章截图检查目标再次人工脱敏。常见反例直接贴调试控制台。推荐动作遮盖 UID、路径和项目标识。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 76问题工单检查目标只附必要片段。常见反例复制整段设备日志。推荐动作限定时间窗和事件类型。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 77安全事件检查目标记录操作和结果。常见反例记录秘密本身。推荐动作可审计但不可复原凭据。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 78审计日志检查目标与调试日志分离。常见反例用 info 日志代替审计系统。推荐动作独立完整性与保留策略。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 79用户提示检查目标错误文案不暴露内部日志。常见反例把 errStr 原样显示 UI。推荐动作用户文案与诊断信息分离。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 80多语言检查目标事件码不随语言变化。常见反例用中文错误文案做检索键。推荐动作日志稳定、UI 本地化。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 81性能检查目标避免大对象序列化。常见反例每次异常 JSON.stringify 深层对象。推荐动作提取少量字段。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 82内存检查目标日志参数即时且轻量。常见反例构建巨大字符串后再判断等级。推荐动作门面先决定是否记录。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 83并发检查目标日志事件包含独立 trace。常见反例靠全局 UID 区分请求。推荐动作使用请求级上下文。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 84订阅销毁检查目标记录 listener_removed。常见反例页面销毁仍持续刷日志。推荐动作生命周期内解除监听。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 85成功日志检查目标只记录关键里程碑。常见反例每个函数入口都 info。推荐动作减少噪声提高信噪比。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 86失败日志检查目标只在责任边界记录一次。常见反例每层 catch 重复 error。推荐动作底层返回错误上层统一落日志。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 87降级日志检查目标warn 并注明 fallback。常见反例降级被当成功无痕处理。推荐动作让排障看见真实数据来源。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 88恢复日志检查目标记录 recoveredtrue。常见反例只见失败看不见恢复。推荐动作闭合故障时间线。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 89上线审计检查目标扫描 hilog、console 与 stringify。常见反例只检查新增文件。推荐动作覆盖全项目和依赖封装。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。检查项 90最终标准检查目标日志可诊断但不可重建用户隐私。常见反例信息越多越好。推荐动作最小必要、结构稳定、访问受控。证据要求提供代码位置、样例输出或自动扫描结果。通过标准日志保留排障价值同时无法恢复用户秘密或正文。十二、推荐改造顺序第一步检索所有hilog、console、JSON.stringify(error)与字符串拼接。第二步建立禁止字段、需脱敏字段和可公开字段清单。第三步引入统一日志门面与事件命名规范。第四步优先整改登录、鉴权、Cloud DB、聊天与备份日志。第五步为掩码函数、错误摘要和敏感模式扫描增加测试。第六步在 release 构建和问题导出链路中验证最终输出。十三、常见反模式速查反模式风险正确方向登录成功打印 UID用户身份泄露掩码或短期追踪 ID完整序列化异常SDK 上下文泄露允许名单摘要把异常标记 public明文进入日志先脱敏再决定公开console 与 hilog 混用等级和格式不可治理统一门面打印消息正文私密通信泄露只记类型和长度每层 catch 都 error日志重复且难定位责任边界记录一次UI 展示原始 errStr内部信息暴露给用户用户文案与诊断分离release 保留全部 debug噪声和泄露面扩大构建级裁剪与采样十四、总结hilog 脱敏不是给字符串打几个星号。它要求项目同时治理哪些事件值得记录哪些字段可以公开哪些字段必须掩码或禁止进入日志谁能访问、保存多久、如何导出如何让页面错误文案与内部诊断彻底分离。好日志应该让工程师看清故障链路却不能让任何人从日志中还原用户身份、聊天内容或认证凭据。