Understanding Postgres Logging Levels and How They Impact Your Project
因为每个 Supabase 项目都使用 Postgres 作为底层数据库引擎,所以出于各种原因调整日志设置是很常见的——无论是为了解决问题、监控数据库性能,还是审核操作。然而,如果不当修改日志级别,可能会产生大量日志数据,这会占满磁盘空间,并导致明显的性能下降,甚至系统故障。
🌐 Since each Supabase project uses Postgres as its underlying database engine, it’s common to adjust logging settings for various reasons—whether for debugging issues, monitoring database performance, or auditing actions. However, modifying logging levels improperly can lead to an excessive amount of log data being generated, which can fill up your disk space and cause significant performance degradation or even system failure.
1. Postgres 日志级别概览 #
🌐 1. Overview of Postgres logging levels
Postgres 提供了多种日志级别,让你可以控制记录多少信息。这些包括:
🌐 Postgres provides multiple logging levels that allow you to control how much information gets logged. These include:
| 日志级别 | 描述 |
|---|---|
| DEBUG1-5 | 记录数据库操作的非常详细的信息,仅适用于深入调试。 |
| INFO | 记录常规数据库操作的信息,不一定是错误,但可能仍然值得跟踪。 |
| NOTICE | 记录非错误但可能值得注意的消息。 |
| WARNING | 记录警告,表示不会阻止执行但可能在以后引发问题的情况。 |
| ERROR | 记录导致语句执行失败的错误。 |
| LOG | 记录一般信息,如启动、关闭或检查点。 |
| FATAL | 记录导致数据库会话失败的错误。 |
| PANIC | 记录迫使数据库关闭的严重问题。 |
每个日志级别在特定情况下都很有用。下面是每个严重性级别标记的消息示例:
🌐 Each of these log levels is useful in specific situations. Here's an example of what messages tagged with each severity level look like:
1DEBUG: server process (PID 12345) exited with exit code 02INFO: vacuuming "example_schema.public.example_table"3NOTICE: identifier "very_very_very_long_table_name_exceeding_63_characters" will be truncated to "very_very_very_long_table_name_exceedin"4WARNING: SET LOCAL can only be used in transaction blocks5LOG: statement: UPDATE example_table SET column_name = 'Example Value' WHERE id = 10;6ERROR: relation "exam" does not exist at character 77FATAL: role "admin" does not exist8PANIC: database system shutdown requested默认的日志级别是通过 log_min_messages 设置为 WARNING,我们建议保持这个设置。
🌐 The default log level is set to WARNING through the log_min_messages setting, and we recommend keeping it that way.
2. 日志级别过高会如何影响你的数据库 #
🌐 2. How high log levels can affect your database
当用户更改高等级的日志设置时,数据库可能会开始生成大量日志条目。这可能会导致以下问题:
🌐 When users alter a high level of log settings, the database can start generating an overwhelming number of log entries. This can escalate to issues such as:
- 磁盘空间耗尽:如果长时间开启像 DEBUG、INFO 或 NOTICE 这样的详细日志级别,日志文件可能会呈指数增长。而由于日志膨胀导致的磁盘空间耗尽,可能会让你的数据库停止写入数据,还会拖慢查询性能。
- I/O 过载:写入太多日志会增加输入/输出(I/O)操作,这可能会影响数据库速度。被大量日志拖慢的数据库处理请求会更慢,从而导致应用性能下降。
- 数据库锁死:在极端情况下,如果磁盘被日志填满,你的数据库可能会锁死,导致停机或严重的性能下降。
3. 导致日志过载的常见场景 #
🌐 3. Common scenarios that cause log overload
这里有几个常见场景,过度记录可能会成为问题:
🌐 Here are a few common scenarios where excessive logging can become a problem:
- 长时间使用DEBUG日志:虽然对排查问题很有帮助,但长时间开启DEBUG日志可能会导致大量日志堆积。
- 设置监控的INFO:记录INFO对跟踪一般数据库活动很有帮助,但如果一直开启,仍然可能导致大量噪音和不必要的日志增长。
- 频繁写操作:如果你的数据库处理大量写操作(例如插入、更新或删除),即使是低级别的日志(比如 NOTICE 或 INFO)也可能导致日志大量积累。
4. 如何有效管理 Postgres 的日志级别 #
🌐 4. How to manage Postgres log levels effectively
a. 选择合适的日志级别 对于大多数用户来说,将 Postgres 日志设置为 WARNING 或 ERROR 就足够日常操作使用了。这里有一个通用的指导:
- 警告:在正常操作期间使用此级别进行通用日志记录。它会捕捉那些可能不关键但值得关注的问题。
- 错误:这个级别非常适合生产环境。它只记录阻止查询执行的失败,大大减少了日志噪音。
- 调试、信息或通知:尽量少用这些级别,仅用于短期调试或诊断。收集完必要信息后,一定要记得恢复设置。
b. 如何调整日志级别 你可以在 SQL 编辑器或任何连接的 Postgres 客户端中使用 SQL 命令来调整日志级别:
- 查看当前日志级别:
1SHOW log_min_messages;- 要将日志级别设置为 WARNING(推荐默认值):
1ALTER ROLE postgres SET log_min_messages TO 'WARNING';- 要把日志级别设置为ERROR:
1ALTER ROLE postgres SET log_min_messages TO 'ERROR';- 要重置到默认级别:
1ALTER ROLE postgres RESET log_min_messages;5. 结论 #
🌐 5. Conclusion
Postgres 日志在正确配置时可以为你的数据库活动和性能提供有价值的洞察,但关键在于找到合适的平衡。配置得当的话,它们非常有用。
🌐 Postgres logs provide a powerful way to gain valuable insights into your database activity and performance when properly configured, but the key lies in finding the right balance. When set up properly, they can be incredibly useful.
6. 其他资源 #
🌐 6. Other resources
a. PostgreSQL 中记录的事件 想要详细了解数据库中记录的事件类型(例如连接事件、检查点事件、长时间运行的查询、定时任务以及基于严重性的日志记录),你可以参考官方文档:
b. PGAudit:用于合规和安全的Postgres审计
我们支持 PGAudit 扩展,它扩展了 Postgres 内置的日志功能,用于跟踪数据库活动以进行审计。
🌐 We support PGAudit extension, which extends Postgres’s built-in logging capabilities to track database activities for auditing purposes.
有关详细的配置说明和日志选项,请参考完整文档:PGAudit 配置指南
🌐 For detailed configuration instructions and logging options, refer to the complete documentation: PGAudit Configuration Guide
c. 调试函数 想了解更多关于如何在 Supabase 中调试函数的信息,请参考官方指南:调试函数。