在 Postgres 中,設置 log_rotation_size 但我的日誌仍然沒有旋轉
我在 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