全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 20 道配套习题

错误处理与日志专题

专题说明

本专题深入讲解 GORM 错误处理机制与日志系统,涵盖 Error 类型判断、常见错误识别(RecordNotFound、InvalidDB、DuplicatedKey 等)、Logger 接口定制、日志级别控制及 SQL 日志输出,帮助开发者高效排查数据库问题。

学习目标

  1. 掌握 GORM 常见错误类型及其判断方法
  2. 理解 Logger 接口规范,能够自定义日志输出
  3. 掌握日志级别配置与 SQL 慢查询日志
  4. 能够结合错误处理实现健壮的业务逻辑

学习内容

本专题涵盖以下知识点:

  • GORM 内置错误类型(ErrRecordNotFound、ErrInvalidDB 等)
  • errors.Is() 与 errors.As() 错误判断
  • Logger 接口定义与自定义实现
  • 日志级别(Silent/Error/Warn/Info)控制
  • SQL 日志输出与慢查询阈值配置

学习建议

  1. 区分 errors.Is() 和 errors.As() 的使用场景
  2. 生产环境建议开启 Warn 级别日志,避免过多日志影响性能
  3. 结合 GORM 的 Error 回调机制统一处理错误

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
单选题

在GORM中配置日志输出,以下哪种日志级别最适合生产环境使用?

A

Silent - 完全关闭所有日志输出

B

Error - 只输出错误级别的日志

C

Warn - 输出警告和错误级别的日志

D

Info - 输出所有SQL语句和参数

2
多选题

关于GORM的日志配置,以下哪些说法是正确的?

A

可以通过logger.New创建自定义的日志器,指定日志级别和输出方式

B

GORM默认将日志输出到标准输出(stdout),可以通过配置修改

C

可以通过设置IgnoreRecordNotFoundError控制是否记录"记录未找到"的日志

D

GORM的日志系统基于zap,可以直接使用zap的配置

3
判断题

GORM的SlowThreshold参数用于设置慢查询的时间阈值,当SQL执行时间超过该阈值时会以Warn级别输出日志,这可以帮助识别性能问题。

A

B

4
填空题

GORM支持通过____________实现日志的格式化输出,可以将日志输出到______________________或其他目标,并通过________控制日志文件的大小和保留时间。

5
单选题

在GORM日志中,关于SQL参数的记录方式,以下哪种做法最合理?

A

总是记录完整的SQL参数值,便于排查问题

B

永远不记录参数值,只记录SQL模板,避免泄露敏感信息

C

根据日志级别决定是否记录参数值,Info级别记录,Warn/Error级别不记录

D

对敏感参数(如密码)进行脱敏后再记录,其他参数正常记录

6
多选题

在GORM应用中,关于数据库操作日志与业务日志的管理,以下哪些做法是正确的?

A

GORM日志和业务日志应该输出到不同的目标,便于分别处理

B

GORM日志应该使用独立的Logger实例,与业务日志的配置分离

C

所有日志应该合并到一起,统一管理

D

GORM日志的级别可以与业务日志不同,如GORM用Warn,业务用Info

7
单选题

关于GORM日志在不同环境的配置,以下哪种策略最合理?

A

开发环境使用Info级别+彩色输出,生产环境使用Warn级别+结构化日志

B

所有环境使用相同的日志配置,保持一致性

C

开发环境关闭日志提高性能,生产环境开启详细日志

D

开发环境使用Debug级别,生产环境使用Info级别

8
多选题

关于GORM日志对性能的影响,以下哪些说法是正确的?

A

日志输出(I/O操作)会显著增加SQL执行的延迟

B

使用异步日志写入可以减少对主业务流程的性能影响

C

关闭日志(Silent级别)可以提升10%以上的数据库操作性能

D

日志级别越高(如Debug),性能影响越大

9
填空题

GORM日志在记录错误时,应该包含________,_______,______________,以便在日志分析时快速____________

10
单选题

在生产环境中,GORM的日志系统和Prometheus监控系统应该如何配合?

A

日志和监控功能重叠,只需要其中一个即可

B

日志用于详细记录和排查问题,监控用于趋势分析和告警,两者互补

C

监控可以替代日志,因为监控指标更结构化

D

日志可以替代监控,因为日志包含更详细的信息

11
单选题

在GORM中实现慢查询监控,以下哪种方案最合适?

A

使用GORM的SlowThreshold配置,自动输出慢查询日志

B

在数据库端开启慢查询日志,通过日志分析工具处理

C

使用自定义Plugin在回调中计算SQL执行时间,超过阈值时记录日志并上报监控

D

以上方案的组合使用是最完整的慢查询监控策略

12
多选题

在分析GORM慢查询时,以下哪些维度是关键的排查方向?

A

SQL执行计划 - 通过EXPLAIN分析索引使用和扫描行数

B

数据库连接等待时间 - 是否因为连接池满而等待

C

网络延迟 - 应用与数据库之间的网络传输时间

D

锁等待时间 - 是否因为行锁或表锁导致阻塞

13
判断题

GORM慢查询的阈值应该设置为固定的值(如1秒),无论业务场景和SQL类型如何,都使用相同的阈值判断。

A

B

14
填空题

GORM慢查询日志中应该记录_____________,________________,____________,_____________________,便于后续分析和优化。

15
单选题

关于GORM慢查询的自动优化,以下哪种说法是正确的?

A

GORM可以自动分析慢查询并添加索引,无需人工干预

B

GORM可以在运行时自动重写慢查询的SQL,提升性能

C

GORM本身不提供自动优化慢查询的功能,需要人工分析和优化

D

GORM可以通过插件自动优化所有慢查询

16
多选题

在GORM慢查询监控中,以下哪些告警策略是合理的?

A

当慢查询数量超过阈值(如每分钟10条)时触发告警

B

当P99 SQL延迟超过目标值(如2秒)时触发告警

C

当某条特定SQL频繁变慢时,针对该SQL单独告警

D

只要出现任何慢查询就立即告警,确保不遗漏

17
单选题

在GORM中,N+1查询问题(如循环中执行查询)会导致大量慢查询,以下哪种方式最有效发现N+1查询问题?

A

通过慢查询日志,发现短时间内大量相似SQL的执行

B

通过代码review,检查是否有在循环中执行数据库操作的代码

C

通过监控SQL执行次数,识别异常的高频SQL模式

D

以上方法的组合使用

18
多选题

在GORM中使用Preload(预加载)关联数据时,以下哪些情况可能导致慢查询?

A

Preload加载了大量关联记录,导致SQL执行时间过长

B

Preload嵌套多层关联,产生复杂的JOIN或多次查询

C

Preload没有使用索引,导致关联查询全表扫描

D

Preload总是比懒加载(Lazy Loading)更慢

19
填空题

优化GORM慢查询的常见手段包括:为查询字段添加__________,使用__________________,优化___________减少扫描行数,以及通过________控制单次查询的数据量。

20
单选题

对于GORM收集的慢查询监控数据,以下哪种分析和可视化方式最有效?

A

将慢查询按SQL类型和表分组,统计数量和平均延迟,在Grafana中展示热力图

B

将每条慢查询的SQL语句打印到日志,人工逐条分析

C

只记录最慢的10条查询,不关注整体趋势

D

慢查询数据不需要可视化,有告警就足够了

← 上一个专题 钩子函数与回调机制专题
下一个专题 → 高级并发与锁机制专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库