日志治理与成本

共 17 题
#

1. 生产环境动态调整日志级别(Spring Actuator /loggers、logback scan)的临时性与自动回退边界

A 动态调级后级别会永久生效,无需处理
B 动态调级应定位为临时手段,通过 TTL 自动回退原级别,并配合权限与审计控制 ✓ 正确答案
C 任何工程师都能在生产环境随意调级,无需审计
D 动态调级只能通过重启服务实现
#

2. 日志量爆炸的典型根因中循环内打日志、异常堆栈在多层重复打印、DEBUG 误开在生产

A 循环内打日志、异常多层重复打印、DEBUG 误开生产都是常见根因,需针对性治理 ✓ 正确答案
B 日志量爆炸只与日志级别有关,与其他无关
C 异常堆栈在多层重复打印能提升诊断价值,应该保留
D 生产环境开启 DEBUG 是推荐做法,便于排障
#

3. 日志的成本治理中按量计费的可观测性后端(Datadog、Splunk)下日志预算与采样策略

A 日志量越多越好,可观测性越强
B Datadog、Splunk 按条数计费但日志量不影响成本
C 通过设定日志预算、采样节流与分级保留,在控制成本的同时保证关键日志可用 ✓ 正确答案
D 采样会完全丢失诊断信息,不应该使用
#

4. 日志预算治理中如何为每个服务设定每日日志量预算、用日志成本仪表盘让团队对日志增长负责,并设置超预算的自动告警?

A 每服务设定日志预算上限,用仪表盘展示增长并超预算自动告警,让团队对日志成本负责 ✓ 正确答案
B 日志量无需预算,越多越好
C 日志成本无法可视化,只能靠人工估算
D 预算超限后无需处理,会自动恢复正常
#

5. 同步日志阻塞业务线程的诊断(appender 锁竞争)与异步化(AsyncAppender)的丢弃策略(discardingThreshold)取舍

A 队列满时丢弃所有日志,包括 ERROR
B 同步日志比异步日志吞吐更高
C 异步日志完全不会阻塞业务线程
D discardingThreshold 在队列接近满时丢弃低级别日志、尽量保留 ERROR,平衡性能与完整性 ✓ 正确答案
#

6. 日志采样与全量留存的合规冲突中 GDPR 数据最小化 vs 安全审计要求完整记录

A 审计日志可以完全省略,以节省成本
B 采样后所有日志都无需留存
C GDPR 要求审计日志全量明文留存
D 通过分类分级、脱敏与留存期管理,满足数据最小化同时保留审计可追溯性 ✓ 正确答案
#

7. println / e.printStackTrace 等反模式的静态检查(Lint 规则禁止生产代码出现)

A e.printStackTrace 是推荐的日志方式,能保留堆栈
B System.out.println 与日志框架等价
C 通过 Checkstyle/PMD/ESLint 等静态检查在 CI 门禁中禁止这些反模式,强制使用日志框架 ✓ 正确答案
D 静态检查无法用于日志反模式治理
#

8. 日志级别治理规范中 WARN 与 ERROR 的告警联动边界,避免 WARN 泛滥失去信号意义

A WARN 与 ERROR 都应立即触发高优先级告警
B ERROR 可以由 WARN 替代,无需区分
C 所有 WARN 都应全量告警,越多越好
D WARN 表示未导致失败但值得注意,通常聚合/趋势告警;ERROR 表示真实失败,应联动告警,避免 WARN 泛滥 ✓ 正确答案
#

9. 热路径(hot path)日志的惰性求值(lazy evaluation / Supplier)避免无谓字符串拼接开销

A 用字符串拼接打日志性能最好
B 惰性求值只在 ERROR 级别生效
C 通过占位符 + Supplier/Lambda 惰性求值,级别关闭时不执行昂贵参数计算,避免无谓开销 ✓ 正确答案
D 日志参数总是会执行,无法避免开销
#

10. 日志框架的性能开销治理中占位符惰性求值({} 与 Supplier)、JSON 序列化时机与单条日志大小上限如何规范?

A 日志应总是立即序列化,保证实时性
B 惰性求值无法降低日志开销
C 单条日志越大越利于诊断
D 用占位符惰性求值、在输出时才序列化 JSON、并限制单条日志大小,降低性能与存储开销 ✓ 正确答案
#

11. 高频重复异常日志的采集端治理中堆栈去重、合并计数与首现时间保留如何设计,既保留诊断信息又不淹没存储?

A 每条重复异常都应逐条落库,保证完整
B 重复异常日志无需处理,恢复后自动消失
C 通过堆栈去重、合并计数与首现时间保留,把重复异常聚合成一条记录,保留诊断信息并控制存储 ✓ 正确答案
D 堆栈去重会丢失所有诊断信息
#

12. 库与应用的日志职责边界中通用库应如何打印日志(门面调用、级别约定),避免库日志污染宿主应用的策略?

A 库应直接绑定具体日志实现并大量输出,便于调试
B 库应面向门面打印日志、遵循级别约定与包名命名,由宿主决定输出与级别 ✓ 正确答案
C 库日志应打到 stdout/stderr,方便收集
D 库不需要打印任何日志
#

13. 日志门面(SLF4J/zap/winston)与采集端(appender/exporter)的职责划分中应用代码为何不应感知采集管道?

A 应用代码应直接调用采集端 API,便于控制输出
B 采集端与门面是同一概念
C 应用代码只与门面交互,采集输出由配置决定,与应用代码解耦 ✓ 正确答案
D 应用代码必须感知日志格式才能正确记录
#

14. 日志、指标、追踪的选择边界中什么信息应写日志、什么应上报指标,代码层如何避免用日志模拟指标?

A 日志与指标可完全互换,用其一即可
B 事件细节用日志、量化数值用指标、调用链路用追踪,避免用日志模拟指标 ✓ 正确答案
C 所有监控需求都应通过日志实现
D 指标系统无法用于告警,只能靠日志
#

15. log-and-throw 与 log-and-swallow 反模式中异常堆栈在多层重复打印的治理与统一异常日志约定?

A log-and-throw 能提升诊断价值,值得推广
B log-and-swallow 是推荐做法,日志最少
C 应统一"异常只记录一次、保留 cause、不吞异常"的约定,避免多层重复打印与掩盖故障 ✓ 正确答案
D 异常堆栈重复打印越多越完整
#

16. 日志的合规中审计与脱敏?

A 审计日志应完整记录所有敏感明文,便于追溯
B 合规意味着日志必须全部删除
C 通过审计日志独立留存、字段级脱敏、留存期管理与访问控制,兼顾可追溯与隐私保护 ✓ 正确答案
D 审计日志无需脱敏,因为只供内部使用
#

17. 日志在测试中的验证中如何测试日志输出(内容、级别、脱敏结果)而不耦合具体日志框架与实现细节?

A 断言具体日志格式字符串,保证测试精确
B 日志测试应直接依赖具体 appender 类
C 日志无法在测试中验证
D 通过捕获日志事件断言内容、级别与脱敏结果,避免耦合具体日志框架实现 ✓ 正确答案