如何禁用PostgreSQL的断开连接日志记录
你提到的这类断开连接日志,是由PostgreSQL的log_disconnections参数控制的——默认情况下这个参数是开启状态,所以系统会记录每一次会话断开的事件。要禁用这类日志,你可以按照以下步骤操作:
1. 先确认当前参数状态
登录到PostgreSQL数据库(比如用psql客户端),执行以下命令查看当前log_disconnections的设置:
SHOW log_disconnections;
如果返回on,说明这个功能正是生成你看到的那些日志的原因。
2. 修改参数禁用日志
临时生效(无需重启数据库,重启后恢复默认)
执行以下SQL命令修改系统参数,然后重载配置让更改立即生效:
ALTER SYSTEM SET log_disconnections = off; SELECT pg_reload_conf();
执行后,新的断开连接事件就不会再被记录,但如果后续重启PostgreSQL,这个设置会回到默认值。
永久生效(重启后依然保持设置)
找到PostgreSQL的配置文件postgresql.conf(位置因系统而异,比如/var/lib/postgresql/<版本号>/main/或/etc/postgresql/<版本号>/main/目录下),找到log_disconnections这一行,修改为:
log_disconnections = off
保存文件后,执行SELECT pg_reload_conf();重载配置,或者直接重启PostgreSQL服务让更改生效。
托管数据库的特殊情况
如果你用的是云托管PostgreSQL服务(比如AWS RDS、GCP Cloud SQL等),通常不能直接修改postgresql.conf,需要通过服务商控制台或API修改数据库参数组中的log_disconnections参数为off,再应用参数组即可。
补充说明
关闭这个日志后,你将无法看到会话断开的相关记录,所以如果后续需要排查连接异常问题,可能需要重新开启该参数。如果只是想减少日志量但不想完全禁用,也可以考虑调整日志级别,但针对这类断开连接日志,最直接的方式就是修改log_disconnections参数。
你提供的日志示例:
May 30 10:13:08 my-app app/postgres.456514 [SILVER] [11-1] sql_error_code = 00000 time_ms = "2022-05-30 10:13:07.600 UTC" pid="1235859" proc_start_time="2022-05-30 10:13:07 UTC" session_id="629398b4.12db93" vtid="" tid="0" log_line="3" database="XXX" connection_source="34.220.26.230(57398)" user="XXX" application_name="my-app-web.2" LOG: disconnection: session time: 0:00:00.051 user=XXXX database=XXX host=34.220.26.230 port=57398
内容的提问来源于stack exchange,提问作者Rodrigo

