본문으로 건너뛰기

log_line_prefix

버전기본값context타입
14'%m [%p] ' which logs a time stamp and the process IDsighupstring
15'%m [%p] ' which logs a time stamp and the process IDsighupstring
16'%m [%p] ' which logs a time stamp and the process IDsighupstring
17'%m [%p] ' which logs a time stamp and the process IDsighupstring
18'%m [%p] ' which logs a time stamp and the process IDsighupstring
19'%m [%p] ' which logs a time stamp and the process IDsighupstring

각 log 라인의 맨 앞에 붙는 printf 스타일 접두 문자열을 정한다.

%로 시작하는 escape sequence가 상태 정보로 치환되고, 나머지 문자는 그대로 log 라인에 복사된다. 주요 escape는 다음과 같다.

Escape의미세션 전용
%m밀리초 포함 timestamp아니오
%t초 단위 timestamp아니오
%pprocess ID아니오
%u사용자 이름
%ddatabase 이름
%aapplication name
%h / %r원격 host (%r은 포트 포함)
%bbackend type아니오
%eSQLSTATE 에러 코드아니오
%xtransaction 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 문서