重定向PostgreSQL Qt驱动程序stdout/stderr输出

Redirect PostgreSQL Qt driver stdout/stderr output

本文关键字:stderr 输出 stdout 驱动程序 PostgreSQL Qt 重定向      更新时间:2023-10-16

我当前调用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

严可以这样重新修正stderr

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

对于其他有相同问题的用户,您可以使用以下代码禁用警告:

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

但不幸的是,这意味着问题对调用方是隐藏的,并且反斜杠会在数据库中自动转义,这可能会在以后检索数据时造成问题。