19.8. 에러 리포팅 및 로깅

19.8.1. Where To 로그
19.8.2. When To 로그
19.8.3. What To 로그
19.8.4. CSV 형식 로그 출력 사용
19.8.5. 프로세스 제목

19.8.1. Where To 로그

log_destination (string)

PostgreSQLstderrcsvlog, syslog를 비롯한 서버 메시지를 로깅하는 몇 가지 메서드를 지원한다. Windows의 경우, eventlog로 지원한다. 원하는 로그 대상 목록을 쉼표로 구분하여 이 매개 변수를 설정한다. 기본값은 stderr로만 로깅하는 것이다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

csvloglog_destination에 포함된 경우 로그 항목은 프로그램으로 로그를 로딩하기 편리한 comma separated value(CSV) 형식으로 출력된다. 자세한 내용은 19.8.4절을 참조 바란다. CSV 형식 로그 출력을 사용으로 설정하려면 logging_collector를 사용으로 설정해야 한다.

When either stderr or csvlog are included, the file current_logfiles is created to record the location of the log file(s) currently in use by the logging collector and the associated logging destination. This provides a convenient way to find the logs currently in use by the instance. Here is an example of this file's content:

stderr log/postgresql.log
csvlog log/postgresql.csv

current_logfiles is recreated when a new log file is created as an effect of rotation, and when log_destination is reloaded. It is removed when neither stderr nor csvlog are included in log_destination, and when the logging collector is disabled.

참고

대부분의 Unix 시스템에서 log_destination 옵션의 syslog를 사용하려면 syslog 데몬의 환경 설정을 변경해야 한다. PostgreSQLsyslog 기능 LOCAL0 ~ LOCAL7(syslog_facility 참조)로 로깅할 수 있지만 대부분의 플랫폼에서 기본값 syslog 환경 설정은 모든 해당 메시지를 취소한다. 이것이 작동되게 하려면 다음과 같은 문장을,

local0.*/var/log/postgresql

syslog 데몬의 환경 설정 파일에 추가해야 할 수 있다.

Windows에서 log_destinationeventlog 옵션을 사용하는 경우 이벤트 소스와 라이브러리를 운영 체제에 등록해서 Windows 이벤트 뷰어가 이벤트 로그 메시지를 명확하게 표시하도록 해야 한다. 자세한 내용은 18.12절을 참조 바란다.

logging_collector (boolean)

이 매개 변수는 stderr로 전송된 로그 메시지를 캡처하여 로그 파일로 리다이렉트하는 logging collector 백그라운드 프로세스를 활성화한다. 일부 메시지 유형은 syslog 출력에 나타나지 않을 수 있으므로 syslog에 로깅하는 것보다 이 방법은 대체로 유용하다. (공통된 예시 중 한 가지는 동적 링커 실패 메시지이고, 또 다른 예시는 archive_command 같은 스크립트에서 생성된 에러 메시지이다.) 이 매개 변수는 서버 시작 시에만 설정 가능하다.

참고

logging collector를 사용하지 않고 stderr에 로깅하는 것이 가능하다. 서버의 stderr가 다이렉트된 곳이면 어디든 로그 메시지가 출력된다. 그러나, 해당 메서드는 로그 파일을 로테이션하는 편리한 방법을 제공하지 않으므로 로그 양이 적을 때만 적당하다. 또한 logging collector를 사용하지 않는 일부 플랫폼은 복수 프로세스가 동일한 로그 파일에 동시에 쓰기 때문에 서로가 덮어쓰기 되므로 결과적으로 로그 출력이 왜곡되거나 분실된다.

참고

logging collector는 메시지 분실을 방지하는 용도로 고안되었다. 이것은 부하가 매우 심한 경우에, 컬렉터가 뒤처졌을 경우 서버 프로세스가 추가 로그 메시지의 전송을 시도하면서 차단이 일어날 수 있다. 반대로, 기록할 수 없을 때는 syslog가 메시지를 드롭하는데, 이것은 이러한 상황에서 일부 메시지를 로깅하는 데는 실패했지만 시스템의 나머지는 블로킹하지 않음을 의미한다.

log_directory (string)

logging_collector를 사용으로 설정하면 이 매개 변수는 로그 파일이 생성되는 디렉터리를 결정한다. 절대 경로 또는 클러스터 데이터 디렉터리에 대한 상대 경로로 설정할 수 있다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다. 기본값은 log이다.

log_filename (string)

logging_collector를 사용으로 설정하면 이 매개 변수는 생성된 로그 파일의 파일 이름을 설정한다. 값은 strftime 패턴으로 처리되므로, % 이스케이프를 사용하여 시간에 따라 바뀌는 파일 이름을 지정할 수 있다. (시간대 의존적 % 이스케이프가 있을 경우 log_timezone에서 지정된 시간대로 계산된다.) 지원되는 % 이스케이프는 Open Group의 strftime 규격에 등재된 것과 유사하다. 시스템의 strftime이 직접 사용되지는 않으므로 플랫폼 특정(비표준) 확장자가 효력이 없다. 기본값은 postgresql-%Y-%m-%d_%H%M%S.log이다.

이스케이프 없이 파일 이름을 지정하면 로그 로테이션 유틸리티를 사용하여 결국에는 전체 파일이 채워지는 것을 방지하는 계획을 세워야 한다. 8.4 이전 릴리스에서, % 이스케이프가 사용되지 않으면 PostgreSQL은 새 로그 파일 생성 시간 epoch를 추가했었는데, 이 기능은 사라졌다.

log_destination에서 CSV 형식 출력을 사용으로 설정한 경우 타임스탬프 로그 파일 이름 뒤에 .csv가 추가되어 CSV 형식 출력 파일 이름이 만들어진다. (log_filename.log로 끝나는 경우 접미사가 대신 사용된다.)

이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

log_file_mode (integer)

Unix 시스템에서, 이 매개 변수는 logging_collector가 사용으로 설정된 경우 로그 파일에 대한 권한을 설정한다. (Microsoft Windows에서 이 매개 변수는 무시된다.) 매개 변수 값은, chmodumask 시스템 쉘에서 수용되는 형식으로 지정된 숫자 형식이어야 한다. (관례적인 8진수 형식을 사용하려면 0(영)으로 시작되는 숫자여야 한다.)

기본 권한은, 서버 소유자만 로그 파일을 읽거나 쓸 수 있는 0600이다. 일반적으로 유용한 다른 설정은, 소유자 그룹의 멤버가 파일을 읽을 수 있는 0640이다. 그러나, 해당 설정을 사용하려면 클러스터 데이터 디렉터리 바깥에서도 파일을 저장하도록 log_directory를 변경해야 한다. 로그 파일에 중요한 데이터가 포함되어 있을 수도 있으므로 어떤 경우든 로그 파일을 누구나 읽을 수 있게 하는 것은 현명하지 못하다.

이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

log_rotation_age (integer)

logging_collector를 사용으로 설정하면 이 매개 변수는 개별 로그 파일의 최대 수명을 결정한다. 여기서 지정된 분 시간이 경과된 후 새로운 로그 파일이 생성된다. 설정값에 단위를 지정하지 않으면 분으로 간주한다. 기본값은 24시간이다. 시간을 기준으로 새 로그 파일을 생성하지 않으려면 0으로 설정한다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

log_rotation_size (integer)

logging_collector를 사용으로 설정하면 이 매개 변수는 개별 로그 파일의 최대 크기를 결정한다. 여기서 지정된 킬로바이트가 로그 파일에 방출된 후 새로운 로그 파일이 생성된다. 설정값에 단위를 지정하지 않으면, kb로 간주한다. 기본값은 10MB다. 크기를 기준으로 새 로그 파일을 생성하지 않으려면 0으로 설정한다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

log_truncate_on_rotation (boolean)

logging_collector가 사용으로 설정된 경우 이 매개 변수에 의해 PostgreSQL가 이름이 동일한 기존 로그 파일에 추가하는 것이 아니라 파일을 비운다(덮어쓰기). 단, 비우기는 서버 시작 시 또는 크기 기준 로테이션이 아니라 시간 기준 로테이션에 의해 새 파일이 열린 경우에만 실행된다. off인 경우에는 모든 경우에 기존 파일이 추가된다. 예를 들면, postgresql-%H.log 같은 log_filename과 함께 이 설정을 사용하면 24시간마다 로그 파일을 생성하고 주기적으로 덮어쓰기 된다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

예: 7일간 로그를 유지하고, 1일 1로그 파일의 이름을 server_log.Mon, server_log.Tue 등으로 명명하고, 마지막 주의 로그를 이 주의 로그로 자동 덮어쓰기 하려면 log_filenameserver_log.%a로 설정하고, log_truncate_on_rotationon으로 설정하고, log_rotation_age1440으로 설정해야 한다.

예: 24시간 로그를 유지하고, 1시간당 1개 로그 파일을 생성하되, 로그 파일 크기가 1GB를 초과하면 곧장 로테이션되게 하려면 log_filenameserver_log.%H%M으로 설정하고, log_truncate_on_rotationon으로 설정하고, log_rotation_age60으로 설정하고, log_rotation_size1000000으로 설정해야 한다. log_filename 파일에서 %M을 포함하면 크기 구동 로테이션으로 시간의 초기 파일 이름과는 다른 파일 이름이 선택되도록 할 수 있다.

syslog_facility (enum)

syslog에 로깅하도록 설정된 경우 이 매개 변수는 사용할 syslog facility를 결정한다. LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7 중에서 선택할 수 있으며, 기본값은 LOCAL0이다. 시스템의 syslog 데몬에 관한 문서를 참조하기 바란다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

syslog_ident (string)

syslog에 로깅하도록 설정된 경우 이 매개 변수는 syslog 로그에서 PostgreSQL 메시지를 식별하기 위해 사용되는 프로그램 이름을 결정한다. 기본값은 postgres이다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

syslog_sequence_numbers (boolean)

When logging to syslog and this is on (the default), then each message will be prefixed by an increasing sequence number (such as [2]). This circumvents the --- last message repeated N times --- suppression that many syslog implementations perform by default. In more modern syslog implementations, repeated message suppression can be configured (for example, $RepeatedMsgReduction in rsyslog), so this might not be necessary. Also, you could turn this off if you actually want to suppress repeated messages.

This parameter can only be set in the postgresql.conf file or on the server command line.

syslog_split_messages (boolean)

When logging to syslog is enabled, this parameter determines how messages are delivered to syslog. When on (the default), messages are split by lines, and long lines are split so that they will fit into 1024 bytes, which is a typical size limit for traditional syslog implementations. When off, PostgreSQL server log messages are delivered to the syslog service as is, and it is up to the syslog service to cope with the potentially bulky messages.

If syslog is ultimately logging to a text file, then the effect will be the same either way, and it is best to leave the setting on, since most syslog implementations either cannot handle large messages or would need to be specially configured to handle them. But if syslog is ultimately writing into some other medium, it might be necessary or more useful to keep messages logically together.

This parameter can only be set in the postgresql.conf file or on the server command line.

event_source (string)

event log에 로깅하도록 설정된 경우 이 매개 변수는 syslog 로그에서 PostgreSQL 메시지를 식별하기 위해 사용되는 프로그램 이름을 결정한다. 기본값은 PostgreSQL이다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

19.8.2. When To 로그

log_min_messages (enum)

서버 로그에 기록할 메시지 레벨을 제어한다. 유효 값은 DEBUG5DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, and PANIC이다. 각 레벨에는 후속되는 모든 레벨이 포함된다. 후속 레벨일수록 메시지가 로그에 적게 전송된다. 기본값은 WARNING이다. LOG는 여기서 client_min_messages와는 다른 랭크를 갖는다. 슈퍼유저만 이 설정을 변경할 수 있다.

log_min_error_statement (enum)

에러 상태를 유발한 SQL 문이 서버 로그에 기록되는 것을 제어한다. 메시지가 지정된 심각도 이상일 경우 현재 SQL 문이 로그 항목에 포함된다. 유효 값은 DEBUG5DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL, PANIC이다. 기본값은, 에러, 로그 메시지, 심각한 에러 또는 패닉을 유발한 문(statement)을 로깅하는 ERROR이다. 실패 문의 로깅을 효율적으로 해제하려면 이 매개 변수를 PANIC으로 설정해야 한다. 슈퍼유저만 이 설정을 변경할 수 있다.

log_min_duration_statement (integer)

최소한 지정된 시간 이상 쿼리가 실행된 경우 처리 시간과 그 구문을 로깅되게 한다. 예를 들어, 250ms로 설정하면 250ms 이상 실행된 모든 SQL 문이 로깅된다. 이 매개 변수를 활성화하면 애플리케이션에서 최적화되지 않은 쿼리를 찾아내는 데 도움이 된다. 설정값에 단위를 지정하지 않으면, 밀리세컨드로 간주한다. 이것을 0으로 설정하면 모든 모든 쿼리가 로깅된다. -1 (기본값)은 이 기능을 비활성화 한다. 슈퍼유저만 이 설정을 변경할 수 있다.

This overrides log_min_duration_sample, meaning that queries with duration exceeding this setting are not subject to sampling and are always logged.

확장 쿼리 프로토콜을 사용하는 클라이언트의 경우 Parse, Bind 및 Execute 단계의 지속 시간이 각각 로깅된다.

참고

이 옵션을 log_statement와 함께 사용하면 로그 메시지 지속 시간에 log_statement가 반복되지 않으므로 문의 텍스트가 로깅되지 않는다. syslog를 사용하지 않는 경우 프로세스 ID 또는 세션 ID를 사용하여 문 메시지를 나중의 지속 시간 메시지에 연결할 수 있는 log_line_prefix를 사용하여 PID 또는 세션 ID를 로깅하는 것이 좋다.

log_min_duration_sample (integer)

Allows sampling the duration of completed statements that ran for at least the specified amount of time. This produces the same kind of log entries as log_min_duration_statement, but only for a subset of the executed statements, with sample rate controlled by log_statement_sample_rate. For example, if you set it to 100ms then all SQL statements that run 100ms or longer will be considered for sampling. Enabling this parameter can be helpful when the traffic is too high to log all queries. If this value is specified without units, it is taken as milliseconds. Setting this to zero samples all statement durations. -1 (the default) disables sampling statement durations. Only superusers can change this setting.

This setting has lower priority than log_min_duration_statement, meaning that statements with durations exceeding log_min_duration_statement are not subject to sampling and are always logged.

Other notes for log_min_duration_statement apply also to this setting.

log_statement_sample_rate (floating point)

Determines the fraction of statements with duration exceeding log_min_duration_sample that will be logged. Sampling is stochastic, for example 0.5 means there is statistically one chance in two that any given statement will be logged. The default is 1.0, meaning to log all sampled statements. Setting this to zero disables sampled statement-duration logging, the same as setting log_min_duration_sample to -1. Only superusers can change this setting.

log_transaction_sample_rate (floating point)

Sets the fraction of transactions whose statements are all logged, in addition to statements logged for other reasons. It applies to each new transaction regardless of its statements' durations. Sampling is stochastic, for example 0.1 means there is statistically one chance in ten that any given transaction will be logged. log_transaction_sample_rate can be helpful to construct a sample of transactions. The default is 0, meaning not to log statements from any additional transactions. Setting this to 1 logs all statements of all transactions. Only superusers can change this setting.

참고

Like all statement-logging options, this option can add significant overhead.

표 19.2PostgreSQL에서 사용되는 메시지 심각도 레벨을 설명한다. 로깅 출력이 syslog 또는 Windows의 eventlog에 전송되는 경우 심각도 레벨은 표에 나타난 대로 해석된다.

표 19.2. 메시지 심각도 레벨

심각도용도syslogeventlog
DEBUG1 .. DEBUG5개발자를 위한 상세 정보를 제공한다.DEBUGINFORMATION
INFOVACUUM VERBOSE로부터 출력 같은 사용자가 암시적으로 요청한 정보를 제공한다.INFOINFORMATION
NOTICE긴 식별자 잘라내기에 대한 공지 같이 사용자에게 유익한 정보가 제공된다.NOTICEINFORMATION
WARNING트랜잭션 블록 외부로 COMMIT 같은 문제의 가능성이 있는 경고를 제공한다.NOTICEWARNING
ERROR현재 명령이 중단된 원인이 되는 에러를 알려준다.WARNINGERROR
LOGcheckpoint 작업 같이 관리자가 관심 있어 할 정보를 알려준다.INFOINFORMATION
FATAL현재 세션이 중단된 원인이 되는 에러를 알려준다.ERRERROR
PANIC모든 데이터베이스 세션이 중단된 원인이 되는 에러를 알려준다.CRITERROR

19.8.3. What To 로그

application_name (string)

application_nameNAMEDATALEN 글자 수(표준 빌드에서 64자) 이내의 string일 수 있다. 이것은 일반적으로 서버 연결 시 애플리케이션에 의해 설정된다. 이름은 pg_stat_activity 뷰에 표시되고 CSV 로그 항목에 포함된다. log_line_prefix 매개 변수를 통해 일반 로그 항목에 포함될 수도 있다. 인쇄 가능한 ASCII 문자만 application_name 값으로 사용된다. 다른 문자는 물음표(?)로 대체된다.

debug_print_parse (boolean)
debug_print_rewritten (boolean)
debug_print_plan (boolean)

이 매개 변수는 다양한 디버깅 출력을 활성화한다. 설정된 경우 결과로 나온 파싱 트리, 쿼리 재작성 출력 또는 실행된 각 쿼리별로 실행 플랜이 인쇄된다. 이 메시지는 LOG 메시지 수준으로 출력되므로 기본적으로 서버 로그에 나타나지만 클라이언트로 전송되지는 않는다. client_min_messages 및/또는 log_min_messages를 조절하여 변경할 수 있다. 이 매개 변수의 기본값은 off이다.

debug_pretty_print (boolean)

설정된 경우, debug_pretty_printdebug_print_parse, debug_print_rewritten 또는 debug_print_plan에 의해 생성된 메시지를 들여쓰기 한다. 따라서 가독성이 증가하는 대신, off로 설정된 경우의 compact 형식보다 출력이 길어진다. 기본값은 on이다.

log_checkpoints (boolean)

checkpoints 및 restartpoints가 서버 로그에 로깅되게 한다. 일부 통계는 작성된 버퍼 수 및 작성할 때 소요된 시간을 비롯한 로그 메시지에 포함된다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다. 기본값은 off이다.

log_connections (boolean)

서버로의 각 연결 시도 및 성공한 클라이언트 인증 완료가 로깅되게 한다. 이 매개 변수는 세션 시작 후에는 변경할 수 없다. 기본값은 off이다.

참고

psql 같은 일부 클라이언트 프로그램은 패스워드가 필수인지 판단하면서 2번 연결을 시도하므로connection received 메시지가 중복되어 나타나도 문제를 뜻하지는 않는다.

log_disconnections (boolean)

이것은 세션을 중단할 때 외에는 log_connections와 유사하게 서버 로그에 한 줄을 출력하고 세션의 지속 시간을 포함한다. 기본값은 off이다. 이 매개 변수는 세션 시작 후에는 변경할 수 없다.

log_duration (boolean)

완료된 모든 문의 지속 시간이 로깅 되게 한다. 기본값은 off이다. 슈퍼유저만 이 설정을 변경할 수 있다.

확장 쿼리 프로토콜을 사용하는 클라이언트의 경우 Parse, Bind 및 Execute 단계의 지속 시간이 각각 로깅된다.

참고

log_durationlog_min_duration_statement를 0으로 설정하는 것의 차이는 log_min_duration_statement를 초과하면 쿼리 텍스트가 강제로 로깅되지만, 이 옵션은 그렇지 않다는 것이다. 따라서 log_durationon으로 설정되고 log_min_duration_statement가 양의 값을 갖는 경우 모든 지속 시간이 로깅되지만 쿼리 텍스트는 임계값을 초과하는 문인 경우에만 포함된다. 이러한 동작은 고부하 설치에서 통계를 수집할 때 유용하다.

log_error_verbosity (enum)

로깅된 각 메시지에 대해 서버 로그에 작성되는 상세 내역을 제어한다. 유효 값은, 각각 메시지에 표시되는 필드를 나타내는 TERSEDEFAULT, VERBOSE이다. TERSEDETAILHINT, QUERY, CONTEXT 에러 정보의 로깅을 제외한다. VERBOSE 출력은 SQLSTATE 에러 코드(부록 A 참고) 및 소스 코드 파일 이름, 함수 이름 및 에러 발생 줄 번호를 포함한다. 슈퍼유저만 이 설정을 변경할 수 있다.

log_hostname (boolean)

기본적으로, 연결 로그 메시지는 연결 호스트의 IP 주소만 표시한다. 이 매개 변수를 활성화하면 호스트 이름도 로깅된다. 호스트 이름 설정에 따라 이것이 상당한 성능 패널티를 부과할 수도 있다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

log_line_prefix (string)

이것은 각 로그 줄의 처음에 출력되는 printf 스타일 string이다. % 문자는 이스케이프 시퀀스로 시작되며 아래 요약된 상태 정보로 대체된다. 미인식 이스케이프는 무시된다. 다른 문자는 로그 줄에 직접 복사된다. 일부 이스케이프는 세션 프로세스에 의해 인식만 된고, 메인 서버 프로세스 같은 백그라운드 프로세스에 의해 빈 것으로 처리된다. 상태 정보는 % 뒤, 옵션 앞에 숫자 리터럴을 지정함으로써 왼쪽 또는 오른쪽에 정렬될 수 있다. 음의 값은 최소 너비를 갖도록 상태 정보를 오른쪽에서 공백으로 채우고, 양의 값은 왼쪽에서 공백으로 채운다. 패딩(padding)은 로그 파일의 가독성을 늘릴 때 유용하다.

이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다. 기본값은 '%m [%p] ' 이며 로그 기록 시간과 해당 프로세스 ID다.

EscapeEffectSession only
%a어플리케이션 이름yes
%u사용자 이름yes
%d데이터베이스 이름yes
%r원격 호스트 이름 또는 IP 주소 및 원격 포트yes
%h원격 호스트 이름 또는 IP 주소yes
%b백엔드 종류no
%p프로세스 IDno
%t밀리초 없는 타임스탬프no
%m밀리초 있는 타임스탬프no
%n밀리초를 포함한 타임스탬프 (Unix epoch 형태)no
%i명령 태그: 세션의 현재 명령 유형yes
%eSQLSTATE 에러 코드no
%c세션 ID: 아래 참조no
%l1부터 시작하는 각 세션 또는 프로세스의 로그 줄 번호no
%s프로세스 시작 타임스탬프no
%v가상 트랜잭션 ID(backendID/localXID)no
%x트랜잭션 ID(아무것도 할당되지 않은 경우 0)no
%q출력은 하지 않지만 이 시점에서 중단을 위한 비 세션 프로세스를 표시하며, 세션 프로세스에 의해 무시된다.no
%%리터럴 %no

The backend type corresponds to the column backend_type in the view pg_stat_activity, but additional types can appear in the log that don't show in that view.

%c 이스케이프는 점으로 구분된 4바이트 16진수(선행 0 없음) 2개로 환경 설정되는 의사 고유(quasi-unique)세션을 인쇄한다. 숫자는 프로세스 시작 시간 및 프로세스 ID이므로 해당 항목의 인쇄 공간 절약 방법으로 %c를 사용할 수도 있다. 예를 들면, pg_stat_activity의 세션 식별자를 생성하려면 아래 쿼리를 사용한다.

SELECT to_hex(EXTRACT(EPOCH FROM backend_start)::integer) || '.' ||
 to_hex(pid)
FROM pg_stat_activity;

작은 정보

log_line_prefix에 비어 있지 않은 값을 설정하면 보통은 마지막 문자가 공백이 되도록 해서 로그 줄의 나머지와 육안상 구분이 되게 해야 한다. 문장 부호를 사용할 수도 있다.

작은 정보

Syslog는 자체 타임스탬프와 프로세스 ID 정보를 생성하므로 syslog에 로깅하는 경우 사용자는 이러한 이스케이프를 포함하는 것을 원하지 않을 수도 있다.

작은 정보

The %q escape is useful when including information that is only available in session (backend) context like user or database name. For example:

log_line_prefix = '%m [%p] %q%u@%d/%a '

log_lock_waits (boolean)

잠금 획득을 위해 세션이 deadlock_timeout 이상 대기한 경우 로그 메시지를 생성할 것인지를 제어한다. 잠금 대기가 성능 저하의 원인이 되는지를 판단할 때 유용하다. 기본값은 off이다. 이 설정은 슈퍼유저만 바꿀 수 있다.

log_parameter_max_length (integer)

If greater than zero, each bind parameter value logged with a non-error statement-logging message is trimmed to this many bytes. Zero disables logging of bind parameters for non-error statement logs. -1 (the default) allows bind parameters to be logged in full. If this value is specified without units, it is taken as bytes. Only superusers can change this setting.

This setting only affects log messages printed as a result of log_statement, log_duration, and related settings. Non-zero values of this setting add some overhead, particularly if parameters are sent in binary form, since then conversion to text is required.

log_parameter_max_length_on_error (integer)

If greater than zero, each bind parameter value reported in error messages is trimmed to this many bytes. Zero (the default) disables including bind parameters in error messages. -1 allows bind parameters to be printed in full. If this value is specified without units, it is taken as bytes.

Non-zero values of this setting add overhead, as PostgreSQL will need to store textual representations of parameter values in memory at the start of each statement, whether or not an error eventually occurs. The overhead is greater when bind parameters are sent in binary form than when they are sent as text, since the former case requires data conversion while the latter only requires copying the string.

log_statement (enum)

로깅할 SQL 문을 제어한다. 유효 값은 none(off), ddl, mod, all(모든 문)이다. ddlCREATEALTER, DROP 문 같은 모든 데이터 정의 문을 로깅한다. mod는 모든 ddl 문과 INSERTUPDATE, DELETE, TRUNCATE, COPY FROM같은 데이터 수정 문을 로깅한다. PREPAREEXECUTE, EXPLAIN ANALYZE문도 포함된 명령이 적절한 타입인 경우 로깅된다. 확장 쿼리 프로토콜을 사용하는 클라이언트의 경우 Execute 메시지를 수신하면 로깅이 발생되고, Bind 매개 변수의 값이 포함된다(작은따옴표를 겹쳐서 사용).

기본값은 none이다. 슈퍼유저만 이 설정을 변경할 수 있다. The default is none. Only superusers can change this setting.

참고

기본 파싱이 완료되어 문 타입이 결정된 후에만 로그 메시지가 발생되므로 log_statement = all 설정에 의해서도 간단한 구문 에러가 포함된 문은 로깅되지 않는다. 확장 쿼리 프로토콜의 경우 이 설정은 Execute 단계 전에 실패한 문을 로깅하지 않는다(예: 파싱 분석 또는 플래닝 도중). 해당 문을 로깅하려면 log_min_error_statementERROR(또는 그 이상)로 설정해야 한다.

log_replication_commands (boolean)

Causes each replication command to be logged in the server log. See 52.4절 for more information about replication command. The default value is off. Only superusers can change this setting.

log_temp_files (integer)

임시 파일 이름과 크기의 로깅을 제어한다. 정렬, 해시 및 임시 쿼리 결과를 위해 임시 파일을 생성할 수 있다. 이 설정이 활성화하면, 각 임시 파일이 만들어졌다 삭제될 때 로그를 남긴다. 0 값은 모든 임시 파일 정보를 로깅하고, 양의 값은 크기가 지정된 킬로바이트 이상일 때만 로깅된다. 단위를 지정하지 않으면 kb로 간주한다. 기본값은, 해당 로깅이 비활성화되는 -1이다. 슈퍼유저만 이 설정을 변경할 수 있다.

log_timezone (string)

서버 로그에 작성되는 타임스탬프에 사용할 시간대를 설정한다. timezone과 달리, 이 값은 클러스터 차원(cluster-wide)의 값이므로 모든 세션이 일관되게 타임스탬프를 알려준다. 내장 기본값은 GMT이지만, 일반적으로 postgresql.conf에 오버라이드되고 initdb는 시스템 환경에 해당되는 곳에 설정을 설치한다. 자세한 내용은 8.5.3절을 참조 바란다. 이 매개 변수는 postgresql.conf 파일 또는 서버 커맨드 라인에서만 설정 가능하다.

19.8.4. CSV 형식 로그 출력 사용

log_destination 목록에서 csvlog를 포함하면 로그 파일을 데이터베이스 테이블에 편리하게 가져올 수 있다. 이 옵션은 쉼표로 구분된 값(CSV) 형식으로 로그 줄을 출력하며, 밀리초의 타임스탬프, 사용자 이름, 데이터베이스 이름, 프로세스 ID, 클라이언트 호스트:포트 번호, 세션 ID, 세션별 줄 번호, 명령 태그, 세션 시작 시간, 가상 트랜잭션 ID, 일반 트랜잭션 ID, 에러 심각도, SQLSTATE 코드, 에러 메시지, 에러 메시지 상세, 힌트, 에러 유발 내부 쿼리(있을 경우), 에러 위치의 문자 카운트, 에러 문맥, 에어 유발 사용자 쿼리(있을 경우 및 log_min_error_statement에서 활성화된 경우), 에러 위치의 문자 카운트, PostgreSQL 소스 코드에서 에러의 위치(log_error_verbosityverbose로 설정된 경우), 응용프로그램 이름과 백엔드 종류 칼럼으로 환경 설정되어 있다. CSV 형식 로그 파일 출력을 저장하기 위한 샘플 테이블 정의는 다음과 같다.

CREATE TABLE postgres_log
(
log_time timestamp(3) with time zone,
user_name text,
database_name text,
process_id integer,
connection_from text,
session_id text,
session_line_num bigint,
command_tag text,
session_start_time timestamp with time zone,
virtual_transaction_id text,
transaction_id bigint,
error_severity text,
sql_state_code text,
message text,
detail text,
hint text,
internal_query text,
internal_query_pos integer,
context text,
query text,
query_pos integer,
location text,
application_name text,
backend_type text,
PRIMARY KEY (session_id, session_line_num)
);

로그 파일을 이 테이블로 가져오려면 COPY FROM 명령을 사용해야 한다.

COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;

It is also possible to access the file as a foreign table, using the supplied file_fdw module.

CSV 로그 파일 가져오기를 단순화하려면 몇 가지 작업이 필요하다.

  1. 로그 파일에 대한 일관되고, 예측 가능한 네이밍 체계를 제공하려면 log_filenamelog_rotation_age를 설정해야 한다. 이로써 사용자는 파일 이름과 개별 로그 파일이 완료되는 시점을 예상할 수 있으므로 가져오기에 대한 대비를 할 수 있다.

  2. log_rotation_size를 0으로 설정하면 로그 파일 이름을 예상하기 어려워지므로 크기 기반 로그 파일 로테이션이 비활성화된다.

  3. 오래된 로그 데이터가 새 데이터와 동일한 파일에 혼재되지 않게 하려면 log_truncate_on_rotationon으로 설정해야 한다.

  4. 위의 테이블 정의에는 프라이머리 키 규격이 포함되어 있다. 이것은 동일한 정보를 두 번 가져오는 실수를 방지하는 데 유용하다. COPY 명령은 한 번에 가져올 모든 데이터를 커밋하므로 에러 발생 시 가져오기 전체가 실패하게 된다. 로그 파일을 일부만 가져오고, 나중에 완료 시 다시 파일을 가져오는 경우 프라이머리 키 위반 때문에 가져오기가 실패할 수 있다. 가져오기 전에 로그가 완료되고 닫힐 때까지 기다려야 한다. 이 절차는 또한 기록이 아직 완료되지 않은 일부 라인을 가져오는 실수를 함으로써 COPY가 실패하게 되는 사태를 방지한다.

19.8.5. 프로세스 제목

서버 프로세스들의 상태가 바뀔 때, 프로세스 이름을 어떻게 표시할지 설정한다. 이 프로세스 이름은 일반적으로 ps 명령이나, 윈도우즈인 경우, 프로세스 탐색기 프로그램에서 볼 수 있다. 자세한 내용은 27.1절 참조.

cluster_name (string)

Sets a name that identifies this database cluster (instance) for various purposes. The cluster name appears in the process title for all server processes in this cluster. Moreover, it is the default application name for a standby connection (see synchronous_standby_names.)

클러스터 이름을 포함해서 보여준다. 클러스터 이름은 NAMEDATALEN (기본 빌드 초기값은 64 문자열) 길이의 임의 문자열이다. cluster_name 값으로 출력될 수 있는 ASCII 문자만 사용할 수 있다. 그 외 문자에 대해서는 물음표(?)로 치환되어 보여진다. 이 값으로 빈 문자열('')(기본값)을 지정하면, 보여주지 않는다. 이 설정값은 서버 시작 할 때만 지정할 수 있다.

update_process_title (boolean)

새 SQL 명령이 서버에서 수신될 때마다 프로세스 제목 업데이트를 활성화한다. 대부분의 운영체제에서는 기본값이 on이다. 프로세스 제목은 일반적으로 ps 명령으로 보거나 프로세스 탐색기를 사용하여 Windows에서 볼 수 있다. 하지만, 윈도우즈인 경우, 해당 갱신 작업에 비용이 많이 들어 기본값을 off로 했다. 슈퍼유저만 이 설정을 변경할 수 있다.