Postgresql
PostgreSQL 日誌記錄:語句分成多行
在 PostgreSQL v10 及更高版本中,我使用副檔名 pg_stat_statements 啟動了語句的日誌記錄。我的配置:
logging_collector = on log_line_prefix = '%t [%p]: [%l-1] db=%d,user=%u,app=%a,client=%h ' log_destination = 'stderr,syslog' log_statement = all
如果我執行一個簡單的查詢:
postgres=# select current_timestamp;
在日誌中,它將顯示前綴和語句,如下所示:
Line 1: (prefix) statement: select current_timestamp;
但是,如果我有一個拆分為多行的查詢,例如:
select current_timestamp;
在日誌中它將顯示 2 行:
Line 1: (prefix) select Line 2: current_timestamp;
這個“current_timestamp”是孤立的,沒有前綴,我無法將行與“select”部分匹配。
如何配置以使多行語句顯示在日誌的單行中?
像這樣:
陳述:
select current_timestamp;
日誌:
Line 1: (prefix) statement: select current_timestamp;
我已經測試更改為 csvlog 並且得到了相同的結果。
為什麼我需要這個?我將日誌配置為發送到中央數據庫以進行審計。這些日誌通過 Kiabana 儀表板公開。一個語句的日誌中有幾行,特別是如果行(第一行除外)沒有前綴,則很難找到完整的語句。
謝謝你。
只要您使用適當的 csv 解析器,csv 格式就很容易解析。嵌入的換行符在引號內,將被正確理解為不是記錄終止符。
如果您使用此處描述的方式將其發送到中央數據庫,它應該可以正常工作。
PostgreSQL 不會從語句中刪除換行符。使用
stderr
日誌格式,您可以分辨出這樣的續行,因為它們以製表符開頭。但我的建議是使用
csvlog
. 這也不會刪除換行符,但它會用雙引號正確轉義它們,以便每個 CSV 解析器都可以正確讀取它們。