已合并
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.md25-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.ctests/.../alog_host_excp_utest.ccdocs/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):

  • 已采纳:DlogGetStdoutEnvret != EN_OK(取值长度 ≥ STDOUT_ENV_VALUE_LEN)分支缺少覆盖。新增 Issue768ScenarioCheckStdoutLongValue 及 TC-768-008/009 两个用例,断言返回 false、告警出现且过长取值未被回显;仅新增测试,生产代码未改动。
  • 未采纳(E2E 目录残留导致 access 假阳性):用例走 threadsafe death test,子进程 re-exec 后 SetUpTestCase/SetUp 会重新清理 PATH_ROOTPATH_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