Ubuntu系统下查看PostgreSQL数据库日志的方法
PostgreSQL的默认日志文件存储在/var/log/postgresql/
目录下,文件名格式为postgresql-<version>-main.log
(<version>
为PostgreSQL版本号,如15、16)。使用以下命令实时查看最新日志内容:
sudo tail -f /var/log/postgresql/postgresql-<version>-main.log
将<version>
替换为实际版本号(可通过psql --version
命令查询),此命令会持续输出日志文件的新增内容,适合监控实时日志。
PostgreSQL作为系统服务运行,其日志可通过journalctl
命令(Systemd的日志管理工具)查看。使用以下命令实时跟踪PostgreSQL服务的所有日志:
sudo journalctl -u postgresql.service -f
若需查看特定时间范围的日志(如2025-09-20至2025-09-21),可添加时间参数:
sudo journalctl -u postgresql.service --since "2025-09-20 00:00:00" --until "2025-09-21 23:59:59"
此方法无需关心日志文件的具体路径,适合统一管理服务日志。
若需要记录所有SQL查询(包括执行时间、语句内容),需修改PostgreSQL的配置文件postgresql.conf
(通常位于/etc/postgresql/<version>/main/
或/var/lib/pgsql/data/
)。找到以下参数并修改:
# 开启日志收集器
logging_collector = on
# 设置日志目录(需确保PostgreSQL用户有写入权限)
log_directory = 'pg_log'
# 设置日志文件名格式(按天分割)
log_filename = 'postgresql-%Y-%m-%d.log'
# 记录所有SQL语句(生产环境建议改为'none'或'dml'以减少日志量)
log_statement = 'all'
# 记录查询执行时间(毫秒)
log_duration = on
修改完成后,重启PostgreSQL服务使配置生效:
sudo systemctl restart postgresql
配置生效后,查询日志会存储在/var/log/postgresql/pg_log/
目录下(路径由log_directory
参数指定),可使用tail
或journalctl
命令查看。
postgres
用户,普通用户无读取权限,需使用sudo
提升权限。logrotate
工具会自动压缩和删除旧日志(保留7天),避免日志文件占用过多磁盘空间。如需自定义轮转策略,可编辑/etc/logrotate.d/postgresql
文件。log_statement = 'all'
会记录所有SQL语句,可能影响性能并产生大量日志。建议生产环境中设置为'none'
(不记录)、'ddl'
(仅记录结构变更)或'dml'
(仅记录数据操作),平衡日志详细程度与性能。