重定向 PostgreSQL Qt 驱动程序 stdout/stderr 输出
Redirect PostgreSQL Qt driver stdout/stderr output
我目前调用 qInstallMsgHandler()
将所有 Qt 错误、警告和调试输出重定向到我自己的消息处理程序。
这在 99% 的时间都有效,但是当通过 QSqlQuery 对象执行 SQL 语句时,我仍然得到以下输出到 stderr:
**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'\'.**
数据库是 PostgresSQL 8.4 版。我还有什么想法可以拦截和重定向此警告吗?
似乎 Qt 驱动程序正在使用的某些 PostgreSQL 库写入 stderr
。
Yan 可以这样重定向 stderr
:
freopen("my_log.txt", "w", stderr);
对于其他遇到相同问题的人,您可以使用以下代码禁用警告:
QSqlQuery query(db);
query.exec("SET standard_conforming_strings TO true");
但不幸的是,这意味着问题对调用者是隐藏的,反斜杠在数据库中自动转义,这可能会导致以后检索数据时出现问题。
我目前调用 qInstallMsgHandler()
将所有 Qt 错误、警告和调试输出重定向到我自己的消息处理程序。
这在 99% 的时间都有效,但是当通过 QSqlQuery 对象执行 SQL 语句时,我仍然得到以下输出到 stderr:
**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'\'.**
数据库是 PostgresSQL 8.4 版。我还有什么想法可以拦截和重定向此警告吗?
似乎 Qt 驱动程序正在使用的某些 PostgreSQL 库写入 stderr
。
Yan 可以这样重定向 stderr
:
freopen("my_log.txt", "w", stderr);
对于其他遇到相同问题的人,您可以使用以下代码禁用警告:
QSqlQuery query(db);
query.exec("SET standard_conforming_strings TO true");
但不幸的是,这意味着问题对调用者是隐藏的,反斜杠在数据库中自动转义,这可能会导致以后检索数据时出现问题。