debug_connection是PostgreSQL 9.5+的调试参数,仅当log_min_messages≥DEBUG1等日志配置就绪时,对匹配IP/CIDR的新连接输出SSL、认证、用户、数据库等详细静态日志,不记录SQL。

debug_connection 是 PostgreSQL 提供的一个配置参数,用于对匹配特定 IP 地址或 CIDR 网段的客户端连接,输出极其详细的静态连接日志(包括 SSL 握手、认证流程、协议版本、用户名、数据库名、启动参数等),但**仅在 log_level ≥ DEBUG1 时生效,且不记录查询语句本身。
确认 PostgreSQL 版本与日志基础配置
该参数自 PostgreSQL 9.5 引入,需确保版本 ≥ 9.5。同时必须启用以下基础日志设置,否则 debug_connection 不会输出任何内容:
-
log_destination 至少包含
stderr或csvlog(推荐 csvlog,便于解析) - logging_collector = on(启用日志收集器)
- log_min_messages = debug1 或更低(如 debug2、debug3;debug1 是 debug_connection 的最低触发级别)
- log_connections = on(虽非 debug_connection 必需,但建议开启以补全基础连接事件)
正确配置 debug_connection 参数
该参数接受一个或多个 IP 地址/CIDR 表达式,用空格分隔,区分大小写,不支持主机名。例如:
- 只记录来自
192.168.1.100的连接日志:debug_connection = '192.168.1.100' - 记录整个子网:
debug_connection = '10.0.5.0/24' - 匹配多个地址(注意引号包裹整个字符串):
debug_connection = '192.168.1.100 172.16.0.5 2001:db8::1'
⚠️ 注意:修改后需 SELECT pg_reload_conf(); 生效(无需重启),且仅对新建立的连接生效。
识别并验证 debug 日志输出位置与内容
当日志配置就绪、客户端从匹配 IP 连接时,你会在日志中看到类似以下 DEBUG1 级别的多行记录(每行以 DEBUG: 开头):
DEBUG: connection received: host=192.168.1.100 port=54321-
DEBUG: SSL connection from "CN=client.example.com"(若启用 SSL) DEBUG: client_encoding is now 'UTF8'DEBUG: backend startup process (PID 12345) initialized for connection from 192.168.1.100DEBUG: database name is "myapp", user name is "api_user"
这些日志默认写入 log_directory 下的主日志文件(如 postgresql-2024-04-01_100000.csv),可用 grep "DEBUG:" logfile | grep "192.168.1.100" 快速筛选。
实用建议与常见陷阱
- 避免在生产环境长期开启
log_min_messages = debug1,会导致日志爆炸;建议临时调高,完成排查后立即降级为info或warning -
debug_connection不影响已存在的连接,只作用于后续新建连接 - IPv6 地址需使用标准格式(如
2001:db8::1),不能省略双冒号缩写中的零段 - 若未看到预期 DEBUG 日志,请检查:是否漏设
log_min_messages、logging_collector,或客户端实际出口 IP 与配置不符(如经 NAT、反向代理)










