啟動日誌 PostgreSQL日誌(一)程序啟動

2021-10-16 03:00:06 字數 1244 閱讀 7820

在pg**中能夠看到很多日誌輸出相關的**,例如:elog、ereport 等等,最終它們會輸出到日誌檔案或者標準輸出/錯誤。本篇先閱讀一下日誌程序的啟動**,其他的下篇再展開。

1、posix函式dup2(int fildes, int fildes2)

重定向輸出,例如:dup2(syslogpipe[1], fileno(stdout)) 之後,我們再向stdout寫入,實際會寫到syslogpipe[1]中。關於這個的更多細節,在*nix系統中,man dup2,或者在網上查閱文件。

後邊會用到,所以先把它提出來簡述。

2、啟動入口

原始檔:src/backend/postmaster/syslogger.c

intsyslogger_start(void)
它不僅僅啟動時會呼叫,在日誌程序掛掉(我沒遇到過)時,也會呼叫以便重新啟動。

3、guc引數logging_collector

配置檔案中如果logging_collector = off,是不會啟動日誌程序的:

if (!logging_collector)    return 0;
guc.c可以看到這個變數和引數之間的關係。

4、日誌程序崩潰

重啟時必須重用已存在的管道,不然現存後端程序無法寫日誌。道理很明顯,它們都是fork出來的,持有舊管道,如果我們重啟日誌時重新建立,這些後端程序無法獲得新管道,除非我們用額外的**再去傳遞,在這裡完全沒有必要。

這也是隨後我們看到的**if (syslogpipe[0] < 0),注釋也明確說明這一點。

5、程序fork

syslogpipe[1]重定向到stdoutstderr,然後將其關閉。隨後的錯誤輸出將寫入管道,更多細節另起一篇解讀。

關閉日誌檔案控制代碼,主程序今後也不會直接寫檔案,也要通過日誌程序寫。

啟動跟其他程序差不多,就是fork,當然在windows平台下只是乙個封裝,前文講過,有興趣可以去翻。

歡迎關注

postgresql 日誌配置

log destination csvlog csv模式輸出 logging collector on 收集日誌開啟 log directory pg log 輸出日期的陌路 log filename postgresql u.log 輸出的檔名加星期格式 log truncate on rotat...

PostgreSQL 啟動設定

安裝好的 postgresql 設定為自動啟動 進入 postgresql 原始碼解壓出來的目錄,啟動指令碼拷貝到 etc init.d 目錄下,重新命名為 postgresql 8.3.7,cp contrib start scripts linux etc init.d postgresql 8...

PostgreSQL的日誌型別

剛開始學習postgres的時候,可能對postgresql中的日誌概念比較模糊,到底有多少種日誌,哪些日誌是能刪除的,各自又記錄什麼樣的功能。postgresql中有三種日誌,pg log,pg xlog和pg clog。一.安裝路徑 這三種資料庫後兩者一般的安裝路徑是 pgdata 下面的資料夾...