已合并
feat: ASCEND_SLOG_PRINT_TO_STDOUT环境变量改名 (#768) #3919
feat: ASCEND_SLOG_PRINT_TO_STDOUT环境变量改名 (#768) #3919
已合并
GuoWenbo创建于 7月29日
GuoWenbo成员
7月29日

描述

issue #768:为提高易用性,将 Host 侧应用日志"打印到 stdout"开关的环境变量 ASCEND_SLOG_PRINT_TO_STDOUT 改名为 ASCEND_LOG_PRINT_TO_STDOUT,与其它 ASCEND_LOG_* 日志变量统一命名。旧变量在资料内声明废弃,兼容期过后仅从资料中删除,代码仍保留该环境变量以避免兼容性问题;资料按 runtime 手册风格添加兼容性说明。

实现要点:

  • DlogCheckEnvStdout() 中新变量 ASCEND_LOG_PRINT_TO_STDOUT 优先,新增辅助函数 DlogGetStdoutEnv() 用 mmGetEnv(name, buf, len) 按名读取(值拷贝到调用者栈缓冲区,规避 getenv 返回内部指针在多线程下的竞争,符合 G.STD.18-CPP)。
  • 新变量未配置时回退旧变量 ASCEND_SLOG_PRINT_TO_STDOUT(同样经 mmGetEnv 按名读取,不再走已废弃的 mmpa 枚举流程 MM_SYS_GET_ENV),并打印一次废弃告警;告警不承诺移除代码,仅提示改用新变量。
  • 新旧变量同时配置时以新变量为准。
  • 维测日志按开源软件通用写法规划:开启打 INFO、废弃/非法值打 WARN、默认/显式关闭静默;废弃告警含 旧名→新名(不含移除预告,因代码永久保留旧变量);非法值告警回显取值与期望值。
  • 资料:新增 ASCEND_LOG_PRINT_TO_STDOUT.md,旧文档加废弃声明,FAQ 同步;措辞对齐仓内 runtime 手册约定(api_ref/23_log_APIs.md、25-01_aclError.md):"将在后续版本中废弃,不建议用户使用,以防止引发兼容性问题",并说明代码中将持续支持旧变量。

变更类型

关联的Issue

https://gitcode.com/cann/runtime/issues/768

如何测试

测试结论:PASS

  1. 白盒 UT(tests/ut/slog/ut/ep/alog_host/testcase/alog_host_excp_utest.cc,被测 DlogCheckEnvStdout)覆盖 9 分支及维测日志断言:新变量=1 开启(INFO) / 新变量=0 静默 / 仅旧变量=1 兼容开启(废弃WARN+INFO) / 新=0旧=1 新变量优先关闭 / 均未配置关闭 / 新变量非法值(回显WARN) / 旧变量非法值(废弃WARN+回显WARN) / 新变量取值过长(不回显WARN) / 旧变量取值过长(废弃WARN+不回显WARN)。
  2. 二进制端到端:通过 dlog 打印接口,按环境变量确认日志落盘 vs 打屏(新=1 打屏、仅旧=1 兼容打屏、均未配置落盘、新=0旧=1 新优先落盘)。
  3. 因 DlogCheckEnvStdout 存在 static 缓存,各分支用独立进程(threadsafe death test)验证。
  4. 独立端到端工程 stdout_env_test/(源码编译形态 + 部署形态)验证维测信息经 vsyslog() 真实落到系统 syslog 的完整链路,各 7/7 Pass。

测试结果:issue768 新增用例 14/14 PASS;ep_alog_host_utest 全量回归 117/117 PASS(排除 1 个预先存在、root 下必挂起、与本需求无关的 PlogFileMgrCovUtest.WriteHostLog_ChownFail)。

核对清单

其他信息

变更文件:src/dfx/log/liblog/slog/dlog_console.c、tests/.../alog_host_excp_utest.cc、docs/zh/env_vars/ASCEND_LOG_PRINT_TO_STDOUT.md(新增)、docs/zh/env_vars/ASCEND_SLOG_PRINT_TO_STDOUT.md、两处 FAQ。

issue 描述更新对齐(2026-08-04,commit 1d90975):
issue 于 2026-08-04 16:48 更新,明确旧变量兼容期过后仅从资料删除、代码保留。原实现承诺 "will be removed in a future release" / "兼容期过后将删除",与之冲突,已修正 6 处:dlog_console.c 告警文案、两份 env_vars 资料、两处 FAQ、viewing_logs_ep.md。UT 断言子串仍匹配新文案,用例无需调整。

检视意见处理(2026-08-03,commit 24dc44a):

  • 已采纳:DlogGetStdoutEnv 中 ret != EN_OK(取值长度 ≥ STDOUT_ENV_VALUE_LEN)分支缺少覆盖。新增 Issue768ScenarioCheckStdoutLongValue 及 TC-768-008/009 两个用例,断言返回 false、告警出现且过长取值未被回显;仅新增测试,生产代码未改动。
  • 未采纳(E2E 目录残留导致 access 假阳性):用例走 threadsafe death test,子进程 re-exec 后 SetUpTestCase/SetUp 会重新清理 PATH_ROOT,PATH_ROOT/debug 在检查前已不存在。
  • 未采纳(改用 MM_ENV_* 宏):MM_ENV_ASCEND_SLOG_PRINT_TO_STDOUT 是枚举值 6002 而非字符串宏,无法作为 mmGetEnv 入参;本次改动的目的之一即脱离已废弃的 MM_SYS_GET_ENV 枚举流程。
  • 未采纳(stdoutFlag 读-判-写无同步):存量问题,本次重构未引入也未加剧,仅影响并发首调时告警可能重复打印,不影响收敛结果;建议另开 issue 跟踪。

风险和遗留问题

  • 兼容期时长与资料删除版本号 issue 未给出;已按"后续版本中废弃"通用措辞表述,不承诺具体版本。
  • 资料文件改动为纯文档,靠人工检视。
  • docs/zh/log_ref/viewing_logs_ep.md 中仍引用旧变量名,本次已同步为新变量并注明旧变量兼容期内可用。
  • static int32_t stdoutFlag 的读-判-写序列无同步保护(存量问题,本次未改善):并发首次调用时废弃/非法值告警可能重复打印,stdoutFlag 收敛结果不受影响。加原子操作会改变初始化时序,超出本 issue 范围,建议另开 issue 处理。
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 GuoWenbo 的贡献)
GGuoWenbo成员
7月29日 创建了 pull request,commit efc99a5a
atomgit-bot
atomgit-bot
7月29日 评论:

变更摘要

此 PR 将日志打印到标准输出的环境变量从 ASCEND_SLOG_PRINT_TO_STDOUT 重命名为 ASCEND_LOG_PRINT_TO_STDOUT(对应 issue #768)。核心改动在 DlogCheckEnvStdout() 函数中实现新旧变量兼容:优先读取新变量,若未配置则回退到旧变量并输出废弃告警;同时新增大量白盒与端到端测试用例覆盖各种场景。

主要改动

  • 环境变量优先级的兼容逻辑:DlogCheckEnvStdout() 中先通过 getenv("ASCEND_LOG_PRINT_TO_STDOUT") 读取新变量,若为 NULL 再回退到旧变量 MM_ENV_ASCEND_SLOG_PRINT_TO_STDOUT,旧变量生效时通过 SELF_LOG_WARN 输出废弃提示,引导用户迁移。
  • 新增 #include "log_print.h":在 dlog_console.c 中引入该头文件以支持 SELF_LOG_WARN 宏的调用。
  • 白盒分支测试(TC-768-001~005):通过死亡测试(EXPECT_EXIT + threadsafe)在独立进程中验证 DlogCheckEnvStdout() 的返回值与废弃告警,覆盖新变量开启、旧变量兼容、新变量优先、默认关闭、非法值等场景。
  • 端到端集成测试(TC-768-101~104):通过 Issue768RunStdoutE2eScenario 辅助函数实际调用 dlog_error 打印日志,验证新/旧变量控制下的日志打屏与落盘行为是否符合预期。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月29日 评论:

代码审查

I've completed my thorough review of all 6 changed files. Here is my final closing summary.


审查总结

各文件审查结果

文件 结果
src/dfx/log/liblog/slog/dlog_console.c 无问题 — 逻辑正确:新变量优先、回退旧变量、旧变量使用时输出废弃告警,#include "log_print.h" 添加合理
tests/ut/slog/ut/ep/alog_host/testcase/alog_host_excp_utest.cc 2 个 P3 问题(见下方),测试覆盖全面、death test 隔离策略正确
docs/zh/env_vars/ASCEND_LOG_PRINT_TO_STDOUT.md 无问题 — 新文档完整,废弃说明与兼容期说明清晰
docs/zh/env_vars/ASCEND_SLOG_PRINT_TO_STDOUT.md 无问题 — 废弃警告正确,链接到新文档
docs/zh/FAQ/如何通过plog日志定位Device侧异常.md 无问题 — 变量名更新及废弃说明一致
docs/zh/log_ref/faq.md 无问题 — 变量名更新及废弃说明一致

发现汇总

  • P0: 0
  • P1: 0
  • P2: 0
  • P3: 2
# 优先级 文件 行 问题
1 P3 alog_host_excp_utest.cc 250 sprintf 无界写入,PATH_ROOT 过长时栈缓冲区溢出
2 P3 alog_host_excp_utest.cc 260 setenv 返回值未检查,ENOMEM 时测试可能假阳性/假阴性

整体风险判断

低风险。核心 C 代码变更逻辑正确,新环境变量优先级、旧变量兼容回退、废弃告警机制均实现正确。文档更新一致且完整。测试覆盖了关键分支(新变量开/关、旧变量兼容、优先级、非法值、端到端打屏/落盘)。两个 P3 问题仅影响测试代码本身的健壮性,不影响生产行为。建议合入。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
不准确?
CANN-robotCANN-robot成员
7月29日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月29日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
docs ✅ 卢煜坤, 王涛 (2/2) ✅ 卢煜坤, 王涛 (2/1)
src/dfx ✅ zhuliangying, newstarzj, 卢煜坤 (3/2) ✅ zhuliangying (1/1)
tests/ut/slog ✅ newstarzj, 卢煜坤, zhuliangying (3/2) ✅ zhuliangying (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

GuoWenbo, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了190条消息 查看更多
wangtao成员
8月19日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
8月19日 添加了label:approved
ykl999
ykl999成员
8月19日 评论:

/approve
/lgtm

likedislike
CANN-robotCANN-robot成员
8月19日 添加了label:lgtm
CANN-robotCANN-robot成员
8月19日 合入了pull request