如何查看 PostgreSQL 的日志?

PostgreSQL 日志位置取决于配置:默认在数据目录的 pg_log 子目录,Ubuntu 包安装在 /var/log/postgresql/。本文介绍各系统的日志位置及关键配置参数。

最佳实践
如何查看 PostgreSQL 的日志?封面

日志位置由 postgresql.conf 的 log_directory 决定(默认是数据目录下的 pg_log/)。Ubuntu/Debian 包安装的在 /var/log/postgresql/;systemd 系统也可以用 journalctl -u postgresql 查看。

各系统的日志位置

# Ubuntu/Debian(apt 安装)
ls /var/log/postgresql/
tail -f /var/log/postgresql/postgresql-15-main.log

# 源码/自定义安装:数据目录下
tail -f $PGDATA/pg_log/postgresql-*.log

# CentOS/RHEL
tail -f /var/lib/pgsql/data/pg_log/postgresql-*.log

# systemd 方式
journalctl -u postgresql -n 100 -f

不确定数据目录在哪?问数据库

SHOW data_directory;
SHOW log_directory;

log_directory 是相对 data_directory 的相对路径(除非配置成绝对路径)。

确认日志收集是否开启

SHOW logging_collector;   -- on 才会写日志文件

如果是 off,PostgreSQL 只把日志输出到 stderr(被 systemd/journald 捕获),不会有日志文件。

常用日志配置

# postgresql.conf
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_min_error_statement = error
log_min_duration_statement = 1000   # 记录超过 1 秒的慢查询
log_line_prefix = '%t [%p]: user=%u,db=%d '

改完 SELECT pg_reload_conf(); 热加载。

观测云对照

观测云提供 PostgreSQL 集成,可采集数据库日志和慢查询,在控制台统一检索分析并配置告警,无需登录每台数据库服务器翻日志。

常见问题(FAQ)

Q:日志文件每天新建一个正常吗?
A:正常。log_filename 里带日期占位符时按天滚动;还可以配置 log_rotation_agelog_rotation_size 控制轮转。

Q:日志里 "%t [%p]:" 这些是什么?
A:log_line_prefix 的转义序列:%t 时间、%p 进程 ID、%u 用户、%d 数据库名。

Q:Docker 里的 PostgreSQL 日志在哪?
A:容器内日志通常输出到 stdout,用 docker logs <容器> 查看;或进容器看 $PGDATA/pg_log/

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台