Postgresql

在 Postgres 中,設置 log_rotation_size 但我的日誌仍然沒有旋轉

  • June 13, 2018

我在 Ubuntu 14.04 上使用 Postgres 9.5。我想在日誌達到一定大小時輪換它們。所以我編輯了 /etc/postgresql/9.5/main/postgresql.conf 並設置了這個

log_rotation_size = 50MB                # Automatic rotation of logfiles will
                                       # happen after that much log output.
                                       # 0 disables.

然後我重新啟動了我的伺服器

sudo /etc/init.d/postgresql restart

但是在執行了一些操作之後,我的磁碟空間用完了,發現我的日誌根本沒有旋轉……

myuser@mymachine:~$ ls -al /var/log/postgresql/postgresql-9.5-main.log
-rw-r----- 1 postgres postgres 3165773943 Dec 29 18:34 /var/log/postgresql/postgresql-9.5-main.log

我還需要做什麼才能讓日誌輪換生效?

在 Debian/Ubuntu 中,根據策略,它logrotate是負責處理所有服務的日誌輪換和清​​除的包,包括 PostgreSQL。

來自 https://www.debian.org/doc/debian-policy/ch-files.html

日誌文件必須偶爾輪換,以免它們無限增長。最好的方法是在目錄 /etc/logrotate.d 中安裝一個日誌輪換配置文件,通常命名為 /etc/logrotate.d/package,並使用 logrotate 提供的工具。

因此,有一個/etc/logrotate.d/postgresql-common配置文件可以調整為在日誌文件增長超過size關鍵字給定的大小時輪換日誌文件,以及許多其他選項。

另一方面,如果您想使用 PostgreSQL 功能來實現這一點,與作業系統的預配置方法相反,您需要考慮 中的所有日誌記錄參數postgresql.conf,而不僅僅是log_rotation_size. 首先,Debian/Ubuntu 打包的 PostgreSQL 將關閉logging_collector以不干擾logrotate,但大多數log_*選項取決於它是否有效,如文件中所述,例如:

https://www.postgresql.org/docs/current/static/runtime-config-logging.html

log_rotation_size(整數)

啟用 logging_collector 時,此參數確定單個日誌文件的最大大小。在將這麼多千字節發送到日誌文件後,將創建一個新的日誌文件。設置為零以禁用基於大小的新日誌文件創建。此參數只能在 postgresql.conf 文件或伺服器命令行中設置。

為了使用 Postgres 內部日誌收集器,日誌文件的名稱必須包含一些 %-轉義,例如

log_filename = 'postgres.%T.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

引用自:https://dba.stackexchange.com/questions/159528