?
このドキュメントでは、 php中國語ネットマニュアル リリース
把數(shù)據(jù)庫服務(wù)器的日志輸出保存在一個地方而不是僅僅把它們放到 /dev/null 里是個好主意。在碰到危險的時候,日志輸出 是非常寶貴的。不過,日志輸出可能很龐大(特別是在比較高的調(diào)試級別上), 而且你不會無休止地保存它們。你需要rotate日志文件, 這樣生成新的日志文件并且經(jīng)常拋棄老的。
如果你簡單地把postgres 的 stderr 重定向到一個文件中,你會有日志輸出,但是截斷日志文件的唯一的方法 是停止并重啟主服務(wù)器。這樣做對于開發(fā)環(huán)境中是可以的,但是你肯定 不想在生產(chǎn)環(huán)境中也這么干。
一個更好的辦法是把主服務(wù)器的 stderr 輸出發(fā)送到某種 日志滾動程序里。我們有一個內(nèi)置的日志滾動程序,你可以通過在 postgresql.conf 里設(shè)置配置參數(shù) logging_collector 為 true的辦法打開它。這個程序的控制參數(shù)在節(jié)Section 18.7.1里描述。 您也可以使用這種方法來捕獲日志數(shù)據(jù)在機(jī)器可讀的CSV (逗號分隔值)格式。
另外,如果你想使用一個外部日志滾動程序(比如Apache 附帶的 rotatelogs 工具),你可以將 stderr 的輸出重定向到這個外部工具。 如果你用pg_ctl 啟動服務(wù)器,那么 stderr 已經(jīng)重定向到 stdout ,因此你只需要一個管道命令,比如:
pg_ctl start | rotatelogs /var/log/pgsql_log 86400
另外一種生產(chǎn)級的管理日志輸出的方法就是把它們發(fā)送給 syslog 處理滾動。要利用這個工具,我們需要設(shè)置postgresql.conf 里的 log_destination 為 syslog(記錄 syslog 日志)。然后在你想強(qiáng)迫 syslog 守護(hù)進(jìn)程開始寫入一個新日志文件的時候,就可以發(fā)送一個 SIGHUP 信號給它。如果你想自動滾動日志文件, 那么我們可以配置 logrotate 程序 處理 syslog 的日志文件。
不過,在很多系統(tǒng)上,syslog 不是非常可靠, 特別是在大型日志信息的情況下;它可能在你最需要那些信息的時候截斷 或者丟棄它們。還有,在 Linux上 syslog 會把每個消息刷新到磁盤上,導(dǎo)致很低下的性能。 你可以在 syslog 配置文件里面的文件名開頭使用 "-"來關(guān)閉這個行為。
請注意上面描述的所有解決方案關(guān)注的是在可配置的間隔上開始一個新 的日志文件,它們并沒有刪除不再需要的舊日志文件。你可能還需要設(shè)置 一個批處理,周期地刪除舊日志文件。另外一個可能的解法是配置日志 滾動程序,讓它周期地覆蓋舊的日志文件。
pgFouine 是做復(fù)雜的日志文件分析的一個外部項目。 當(dāng)重要的消息出現(xiàn)在日志文件,以及許多其它特殊條件的檢測時, check_postgres提供 Nagios 警告。