Pull Request已成功合入, 合并人@CANN-robot
(感谢 GuoWenbo 的贡献)变更摘要
此 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打印日志,验证新/旧变量控制下的日志打屏与落盘行为是否符合预期。


代码审查
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 问题仅影响测试代码本身的健壮性,不影响生产行为。建议合入。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


/approve
/lgtm


描述
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),并打印一次废弃告警;告警不承诺移除代码,仅提示改用新变量。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
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)。DlogCheckEnvStdout存在 static 缓存,各分支用独立进程(threadsafe death test)验证。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、告警出现且过长取值未被回显;仅新增测试,生产代码未改动。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 跟踪。风险和遗留问题
docs/zh/log_ref/viewing_logs_ep.md中仍引用旧变量名,本次已同步为新变量并注明旧变量兼容期内可用。static int32_t stdoutFlag的读-判-写序列无同步保护(存量问题,本次未改善):并发首次调用时废弃/非法值告警可能重复打印,stdoutFlag收敛结果不受影响。加原子操作会改变初始化时序,超出本 issue 范围,建议另开 issue 处理。