log_line_prefix
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | '%m [%p] ' which logs a time stamp and the process ID | sighup | string |
| 15 | '%m [%p] ' which logs a time stamp and the process ID | sighup | string |
| 16 | '%m [%p] ' which logs a time stamp and the process ID | sighup | string |
| 17 | '%m [%p] ' which logs a time stamp and the process ID | sighup | string |
| 18 | '%m [%p] ' which logs a time stamp and the process ID | sighup | string |
| 19 | '%m [%p] ' which logs a time stamp and the process ID | sighup | string |
각 log 라인의 맨 앞에 붙는 printf 스타일 접두 문자열을 정한다.
%로 시작하는 escape sequence가 상태 정보로 치환되고, 나머지 문자는 그대로 log 라인에 복사된다. 주요 escape는 다음과 같다.
| Escape | 의미 | 세션 전용 |
|---|---|---|
%m | 밀리초 포함 timestamp | 아니오 |
%t | 초 단위 timestamp | 아니오 |
%p | process ID | 아니오 |
%u | 사용자 이름 | 예 |
%d | database 이름 | 예 |
%a | application name | 예 |
%h / %r | 원격 host (%r은 포트 포함) | 예 |
%b | backend type | 아니오 |
%e | SQLSTATE 에러 코드 | 아니오 |
%x | transaction ID | 아니오 |
%c | 세션 ID | 아니오 |
%l | 세션·프로세스별 log 라인 번호 | 아니오 |
%q | 출력 없음 — 이후 escape는 세션 프로세스만 출력 | 아니오 |
기본값은 '%m [%p] '로 timestamp와 process ID만 남는다. 세션 전용 escape는 checkpointer 같은 background 프로세스에서는 빈 값으로 처리되는데, %q를 앞에 두면 background 프로세스는 그 지점에서 출력을 멈추기 때문에 라인이 깔끔해진다. 실전에서 많이 쓰는 형태는 다음과 같다.
log_line_prefix = '%m [%p] %q%u@%d/%a '
# 2026-07-02 10:15:00.123 KST [12345] appuser@appdb/myapp LOG: ...값의 마지막 문자는 공백으로 두어야 log 본문과 시각적으로 구분된다. syslog로 log를 보낸다면 syslog가 자체 timestamp와 process ID를 붙이므로 %m, %p는 빼는 편이 낫다. postgresql.conf 파일이나 서버 커맨드라인에서만 설정할 수 있다.
운영 노트: pgBadger 같은 log 분석 도구는 prefix 형식을 알아야 파싱할 수 있다. 도구 도입 전에
'%t [%p]: user=%u,db=%d,app=%a,client=%h ' 같은 형식으로 미리 맞춰 두면 나중에 log를 다시 쌓을 필요가 없다.출처: PostgreSQL 18 문서