2016-04-19 42 views
1

我當前調用qInstallMsgHandler()將所有Qt錯誤,警告和調試輸出重定向到我自己的消息處理程序。重定向PostgreSQL Qt驅動程序stdout/stderr輸出

這個工程的99%的時間,但通過QSqlQuery對象執行SQL語句時,我仍然得到以下輸出到標準錯誤:

**WARNING: nonstandard use of \\ in a string literal 

LINE 1: EXECUTE qpsqlpstmt_11 ('<?xml version=''1.0'' encoding=''U 

HINT: Use the escape string syntax for backslashes, e.g., E'\\'.** 

數據庫PostgreSQL的是8.4版本。任何想法如何我也可以攔截並重定向此警告?

+0

是不是由服務器產生的警告? – alediaferia

+0

在我看來,它來自postgres驅動程序。我在Qt的任何地方都看不到它。 – kh25

+1

它來自這裏:https://github.com/postgres/postgres/blob/c202ecf9023ac3571709c274b326038ae39e90a7/src/backend/parser/scan.l#L1475 – alediaferia

回答

1

似乎Qt驅動程序正在使用的某些PostgreSQL庫寫入stderr

顏可redicrect stderr這樣的:

freopen("my_log.txt", "w", stderr); 
+0

謝謝hank。不幸的是,它還會重定向MessageHandler中當前正在輸出到stderr的其他消息(特別是qFatal和qCritical消息)。如果可能,我希望避免這種情況。 – kh25

0

對於其他有同樣的問題,你可以使用此代碼禁用警告:

QSqlQuery query(db); 
query.exec("SET standard_conforming_strings TO true"); 

但不幸的是,這意味着該問題是由隱藏調用者和反斜槓會在數據庫中自動轉義,這可能會在稍後檢索數據時導致問題。