<commit_before>---
description: 版本：10
---

# 19.8. 錯誤回報與日誌記錄

## 19.8.1. 記錄在哪裡

#### `log_destination` \(`string`\)

PostgreSQL 支援多種記錄伺服器訊息的方法，包括 stderr、csvlog 和 syslog。在 Windows 上，支援 eventlog。 將此參數設定為用逗號分隔的所需日誌目標的列表。 預設情況下僅記錄到 stderr。此參數只能在 postgresql.conf 檔案或伺服器命令中設定。

如果 csvlog 包含在 log\_destination 中的話，則日誌將以「逗號分隔」（CSV）格式輸出，便於將日誌載入到其他程序中。詳情請參閱[第 19.8.4 節](logging.md#19-8-4-using-csv-format-log-output)。 必須啟用 [logging\_collector ](logging.md#logging_collector-boolean)才能産生 CSV 格式的日誌輸出。

如果包含 stderr 或 csvlog，則會建立 current\_logfiles 檔案以記錄日誌記錄收集器和相關日誌記錄目標目前正在使用的日誌檔案的位置。這提供了一種便捷的方式來查詢目前資料庫實例正在使用的日誌。這裡有這個檔案內容的一個例子：

```text
stderr log/postgresql.log
csvlog log/postgresql.csv
```

當一個新的日誌檔案被建立為循環的效果，並且重新載入 log\_destination 時，會重新建立 current\_logfiles。當 log\_destination 中不包含 stderr 和 csvlog，並且日誌記錄收集器被停用時，它將被刪除。

#### 注意

在大多數 Unix 系統上，您需要變更系統 syslog daemon 的配置，以便使用 log\_destination 的 syslog 選項。PostgreSQL 可以登入到系統日誌工具 LOCAL0 到 LOCAL7（請參閱 [syslog\_facility](logging.md#syslog_facility-enum)），但大多數平台上的預設 syslog 配置將放棄所有此類訊息。您需要加入如下的內容：

```text
local0.*    /var/log/postgresql
```

變更 syslog 背景程序的配置檔案以使其産生作用。

在 Windows 上，當您為 log\_destination 使用 eventlog 選項時，應該向作業系統註冊事件來源及其函式庫，以便 Windows 事件查詢器可以清楚地顯示事件日誌消息。詳情請參閱[第 18.11 節](../18.-fu-wu-pei-zhi-yu-wei-yun/registering-event-log-on-windows.md)。

#### `logging_collector` \(`boolean`\)

此參數啟用日誌收集器，這是一個後端的程序，用於攔截發送到 stderr 的日誌訊息並將其重新輸出到日誌檔案。這種方法通常比記錄到 syslog 更有用，因為某些類型的訊息可能不會出現在 syslog 輸出之中。（一個常見的案例是動態連結程序失敗訊息；另一個案例是由如 archive\_command 等腳本産生的錯誤訊息。）此參數只能在伺服器啟動時設定。

#### 注意

可以在不使用日誌收集器的情況下送到 stderr；日誌訊息將只發送到伺服器的 stderr 所指向的任何地方。但是，該方法僅適用於較低階的日誌程序，因為它不提供日誌檔案覆寫的簡便方法。另外，在某些不使用日誌收集器的平台上可能會導致日誌輸出遺失或出現亂碼，因為同時寫入同一日誌檔案的多個程序可能會覆蓋彼此的輸出。

#### 注意

日誌記錄收集器旨在永不遺失訊息。這意味著，如果負載極高，則在收集器落後時嘗試發送其他日誌消息時，伺服器程序可能會被阻止繼續執行。相比之下，如果系統日誌不能寫入訊息，系統日誌更喜歡丟棄訊息，這意味著在這種情況下它可能無法記錄某些訊息，但不會阻塞系統的其餘部分。

#### `log_directory` \(`string`\)

When `logging_collector` is enabled, this parameter determines the directory in which log files will be created. It can be specified as an absolute path, or relative to the cluster data directory. This parameter can only be set in the `postgresql.conf` file or on the server command line. The default is `log`.

#### `log_filename` \(`string`\)

When `logging_collector` is enabled, this parameter sets the file names of the created log files. The value is treated as a `strftime` pattern, so `%`-escapes can be used to specify time-varying file names. \(Note that if there are any time-zone-dependent `%`-escapes, the computation is done in the zone specified by [log\_timezone](https://www.postgresql.org/docs/10/static/runtime-config-logging.html#GUC-LOG-TIMEZONE).\) The supported `%`-escapes are similar to those listed in the Open Group's [strftime](http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html) specification. Note that the system's `strftime` is not used directly, so platform-specific \(nonstandard\) extensions do not work. The default is `postgresql-%Y-%m-%d_%H%M%S.log`.

If you specify a file name without escapes, you should plan to use a log rotation utility to avoid eventually filling the entire disk. In releases prior to 8.4, if no `%` escapes were present, PostgreSQL would append the epoch of the new log file's creation time, but this is no longer the case.

If CSV-format output is enabled in `log_destination`, `.csv` will be appended to the timestamped log file name to create the file name for CSV-format output. \(If `log_filename` ends in `.log`, the suffix is replaced instead.\)

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

#### `log_file_mode` \(`integer`\)

On Unix systems this parameter sets the permissions for log files when `logging_collector` is enabled. \(On Microsoft Windows this parameter is ignored.\) The parameter value is expected to be a numeric mode specified in the format accepted by the `chmod` and `umask`system calls. \(To use the customary octal format the number must start with a `0` \(zero\).\)

The default permissions are `0600`, meaning only the server owner can read or write the log files. The other commonly useful setting is `0640`, allowing members of the owner's group to read the files. Note however that to make use of such a setting, you'll need to alter[log\_directory](https://www.postgresql.org/docs/10/static/runtime-config-logging.html#GUC-LOG-DIRECTORY) to store the files somewhere outside the cluster data directory. In any case, it's unwise to make the log files world-readable, since they might contain sensitive data.

This parameter can only be set in the `postgresql.conf` file or on the server command line.<commit_msg>GitBook: [master] one page modified<commit_after>---
description: 版本：10
---

# 19.8. 錯誤回報與日誌記錄

## 19.8.1. 記錄在哪裡

#### `log_destination` \(`string`\)

PostgreSQL 支援多種記錄伺服器訊息的方法，包括 stderr、csvlog 和 syslog。在 Windows 上，支援 eventlog。 將此參數設定為用逗號分隔的所需日誌目標的列表。 預設情況下僅記錄到 stderr。此參數只能在 postgresql.conf 檔案或伺服器命令中設定。

如果 csvlog 包含在 log\_destination 中的話，則日誌將以「逗號分隔」（CSV）格式輸出，便於將日誌載入到其他程序中。詳情請參閱[第 19.8.4 節](logging.md#19-8-4-using-csv-format-log-output)。 必須啟用 [logging\_collector ](logging.md#logging_collector-boolean)才能産生 CSV 格式的日誌輸出。

如果包含 stderr 或 csvlog，則會建立 current\_logfiles 檔案以記錄日誌記錄收集器和相關日誌記錄目標目前正在使用的日誌檔案的位置。這提供了一種便捷的方式來查詢目前資料庫實例正在使用的日誌。這裡有這個檔案內容的一個例子：

```text
stderr log/postgresql.log
csvlog log/postgresql.csv
```

當一個新的日誌檔案被建立為循環的效果，並且重新載入 log\_destination 時，會重新建立 current\_logfiles。當 log\_destination 中不包含 stderr 和 csvlog，並且日誌記錄收集器被停用時，它將被刪除。

#### 注意

在大多數 Unix 系統上，您需要變更系統 syslog daemon 的配置，以便使用 log\_destination 的 syslog 選項。PostgreSQL 可以登入到系統日誌工具 LOCAL0 到 LOCAL7（請參閱 [syslog\_facility](logging.md#syslog_facility-enum)），但大多數平台上的預設 syslog 配置將放棄所有此類訊息。您需要加入如下的內容：

```text
local0.*    /var/log/postgresql
```

變更 syslog 背景程序的配置檔案以使其産生作用。

在 Windows 上，當您為 log\_destination 使用 eventlog 選項時，應該向作業系統註冊事件來源及其函式庫，以便 Windows 事件查詢器可以清楚地顯示事件日誌消息。詳情請參閱[第 18.11 節](../18.-fu-wu-pei-zhi-yu-wei-yun/registering-event-log-on-windows.md)。

#### `logging_collector` \(`boolean`\)

此參數啟用日誌收集器，這是一個後端的程序，用於攔截發送到 stderr 的日誌訊息並將其重新輸出到日誌檔案。這種方法通常比記錄到 syslog 更有用，因為某些類型的訊息可能不會出現在 syslog 輸出之中。（一個常見的案例是動態連結程序失敗訊息；另一個案例是由如 archive\_command 等腳本産生的錯誤訊息。）此參數只能在伺服器啟動時設定。

#### 注意

可以在不使用日誌收集器的情況下送到 stderr；日誌訊息將只發送到伺服器的 stderr 所指向的任何地方。但是，該方法僅適用於較低階的日誌程序，因為它不提供日誌檔案覆寫的簡便方法。另外，在某些不使用日誌收集器的平台上可能會導致日誌輸出遺失或出現亂碼，因為同時寫入同一日誌檔案的多個程序可能會覆蓋彼此的輸出。

#### 注意

日誌記錄收集器旨在永不遺失訊息。這意味著，如果負載極高，則在收集器落後時嘗試發送其他日誌消息時，伺服器程序可能會被阻止繼續執行。相比之下，如果系統日誌不能寫入訊息，系統日誌更喜歡丟棄訊息，這意味著在這種情況下它可能無法記錄某些訊息，但不會阻塞系統的其餘部分。

#### `log_directory` \(`string`\)

當啟用 logging\_collector 時，此參數確定將在其中建立日誌檔案的目錄。它可以被指定為絕對路徑，或相對於叢集的 data 目錄。該參數只能在 postgresql.conf 檔案或伺服器指令行中設定。預設值是 log。

#### `log_filename` \(`string`\)

當啟用 logging\_collector 時，此參數設定建立的日誌檔案的檔案名稱。該值被視為 strftime 模式，因此 ％-escapes 可用於指定隨時間變化的檔案名稱。（請注意，如果有任何時區相關的 ％-escapes，計算將在由 [log\_timezone](logging.md#log_timezone-string) 指定的區域中完成。）支援的 ％-escapes 與 Open Group 的 [strftime](http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html) 規範中列出的類似。請注意，系統的 strftime 並未直接使用，因此特定於平台的（非標準）延伸功能不起作用。預設值是 postgresql-％Y-％m-％d\_％H％M％S.log。

如果您指定的檔案名稱不含跳脫符號，則應該計劃使用日誌覆寫程序來避免最後存滿整個磁碟。在 8.4 之前的版本中，如果不存在 ％ 跳脫符號，PostgreSQL 會追加新日誌檔案建立時間的紀元，但已經不再是這種情況了。

如果在 log\_destination 中啟用 CSV 格式的輸出，則會將時間戳記檔案名稱附加.csv 以建立 CSV 格式輸出的檔案名稱。 （如果 log\_filename 以 .log 結尾，則替換後綴。）

該參數只能在 postgresql.conf 檔案或伺服器指令中設定。

#### `log_file_mode` \(`integer`\)

On Unix systems this parameter sets the permissions for log files when `logging_collector` is enabled. \(On Microsoft Windows this parameter is ignored.\) The parameter value is expected to be a numeric mode specified in the format accepted by the `chmod` and `umask`system calls. \(To use the customary octal format the number must start with a `0` \(zero\).\)

The default permissions are `0600`, meaning only the server owner can read or write the log files. The other commonly useful setting is `0640`, allowing members of the owner's group to read the files. Note however that to make use of such a setting, you'll need to alter[log\_directory](https://www.postgresql.org/docs/10/static/runtime-config-logging.html#GUC-LOG-DIRECTORY) to store the files somewhere outside the cluster data directory. In any case, it's unwise to make the log files world-readable, since they might contain sensitive data.

This parameter can only be set in the `postgresql.conf` file or on the server command line.
{'fraction_non_alphanumeric': 0.1004429546270801, 'fraction_numerical': 0.011732311744283491, 'mean_word_length': 5.932780082987552, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 3, 'lorem ipsum': 0, 'www.': 3, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3103870', 'n_tokens_mistral': 4540, 'n_tokens_neox': 4877, 'n_words': 814}