PostgreSQL在Ubuntu上的日志配置主要通过postgresql.conf文件实现,该文件通常位于/etc/postgresql/<版本号>/main/
目录下(如/etc/postgresql/14/main/postgresql.conf
)。以下是关键配置参数及说明:
off
),设为on
可捕获stderr和csvlog输出,生成结构化日志文件。pg_log
,相对于$PGDATA
),可设置为绝对路径(如/var/log/postgresql/pg_log
)。postgresql-%Y-%m-%d_%H%M%S.log
(按日期和时间生成唯一文件)。none
(不记录)、ddl
(仅数据定义语句,如CREATE/ALTER/DROP)、mod
(DDL+数据修改语句,如INSERT/UPDATE/DELETE)、all
(所有语句,生产环境慎用)。1000
表示记录超过1秒的查询),用于慢查询排查。1d
表示每天生成新文件),避免单个文件过大。100MB
),达到后自动切割。修改配置文件:使用文本编辑器(如vim
)打开postgresql.conf
,调整上述参数。例如:
sudo vim /etc/postgresql/14/main/postgresql.conf
添加/修改以下内容:
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'mod'
log_min_duration_statement = 1000 # 记录慢查询(超过1秒)
log_rotation_age = 1d
log_rotation_size = 100MB
重启PostgreSQL服务:修改配置后,需重启服务使更改生效:
sudo systemctl restart postgresql
验证配置:通过psql
命令行工具查看参数是否生效:
sudo -u postgres psql
SHOW logging_collector; -- 应返回'on'
SHOW log_directory; -- 应返回配置的目录路径
\q
查看日志文件位置:Ubuntu下PostgreSQL日志默认存储在/var/log/postgresql/
目录下,文件名格式为postgresql-<版本号>-main.log
(如postgresql-14-main.log
):
ls /var/log/postgresql/
查看最新日志:使用tail
命令查看日志文件末尾内容(如最后100行):
sudo tail -n 100 /var/log/postgresql/postgresql-14-main.log
实时监控日志:使用tail -f
命令实时输出日志新增内容(按Ctrl+C
停止):
sudo tail -f /var/log/postgresql/postgresql-14-main.log
搜索特定日志:使用grep
命令过滤关键词(如“error”表示错误日志):
sudo grep "error" /var/log/postgresql/postgresql-14-main.log
为防止日志文件无限增长,需通过log_rotation_age
和log_rotation_size
参数控制切割周期和大小(已在配置步骤中说明)。Ubuntu系统还会自动调用logrotate
工具管理PostgreSQL日志(默认配置位于/etc/logrotate.d/postgresql-common
),无需额外设置。
pgBadger是一款强大的PostgreSQL日志分析工具,可生成HTML格式的详细报告(包含查询频率、执行时间、锁等待等信息)。
安装pgBadger:
sudo apt-get install pgbadger
生成报告:
pgbadger /var/log/postgresql/postgresql-14-main.log -o report.html
查看报告:用浏览器打开report.html
,即可直观分析数据库活动(如慢查询、连接统计等)。
log_statement
设为ddl
或mod
,避免all
对性能造成影响。cron
定时任务删除7天前的日志),释放磁盘空间。postgresql.conf
中的lc_messages
参数为UTF8
:lc_messages = 'UTF8'