PostgreSQL 的日志文件存放在哪里?

PostgreSQL 日志默认位置因系统而异:Ubuntu 在 /var/log/postgresql/,macOS Homebrew 在 /opt/homebrew/var/log/postgres.log,也可配置在数据目录的 log 子目录。本文给出定位与配置方法。

最佳实践
PostgreSQL 的日志文件存放在哪里?封面

快速定位:Ubuntu/Debian 上 PostgreSQL 日志在 /var/log/postgresql/ 目录;macOS Homebrew 安装在 /opt/homebrew/var/log/postgres.log(Intel 机型为 /usr/local/var/log/postgres.log);其他情况要看 postgresql.conflog_directorylog_filename 的配置,或直接用 SQL 查询。

各系统常见默认位置

环境 位置
Ubuntu/Debian(APT) /var/log/postgresql/postgresql-15-main.log
CentOS/RHEL(PGDG) 数据目录下 log/ 子目录,如 /var/lib/pgsql/15/data/log/
macOS Homebrew(Apple Silicon) /opt/homebrew/var/log/postgres.log
Docker 官方镜像 默认输出到 stdout/stderr,docker logs 查看

用 SQL 直接查

SHOW log_directory;
SHOW log_filename;
SHOW data_directory;

log_directory 若是相对路径,则相对于数据目录(data_directory)。也可以一句搞定:

SELECT setting FROM pg_settings WHERE name = 'log_directory';

关键配置项

logging_collector = on            # 开启日志收集器(写文件的前提)
log_directory = 'log'             # 相对数据目录
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_min_duration_statement = 500  # 慢查询阈值(毫秒),-1 关闭

logging_collector 需重启;log_min_duration_statementSET 动态调整。

systemd 场景

很多发行版安装后日志直接进 journal,文件里反而没有:

journalctl -u postgresql -f

观测云对照

统一采集 PostgreSQL 日志。 DataKit 的 PostgreSQL 集成可采集数据库日志与慢查询,慢 SQL 经 Pipeline 解析出执行时长、语句等字段后,在日志查看器检索,并用监控器对慢查询与连接数异常做告警。

常见问题(FAQ)

Q:/var/log/postgresql/ 是空的?
A:可能 logging_collector = off,日志进了 journal;用 journalctl -u postgresql 看。

Q:日志文件每天都新建一个,能合并吗?
A:由 log_filename 的时间格式与 log_rotation_age 控制轮转粒度,把文件名中的时分去掉即按天复用追加。

Q:如何记录所有执行的 SQL?
A:临时把 log_min_duration_statement = 0 即记录全部语句;生产环境慎用,量很大。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台