2016-04-19 5 views
1

Я в настоящее время звоню qInstallMsgHandler(), чтобы перенаправить все ошибки Qt Errors, Warnings и Debug на свой собственный обработчик сообщений.Redirect PostgreSQL Qt driver stdout/stderr output

Это работает 99% времени, но при выполнении SQL заявления через объект QSqlQuery я все еще получаю следующий вывод 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. Любые идеи, как я могу перехватить и перенаправить это предупреждение?

+0

Разве это предупреждение не генерируется сервером? – alediaferia

+0

Похоже, что он исходит от водителя postgres. Я не вижу его нигде в Qt. – kh25

+1

Он исходит отсюда: https://github.com/postgres/postgres/blob/c202ecf9023ac3571709c274b326038ae39e90a7/src/backend/parser/scan.l#L1475 – alediaferia

ответ

1

Кажется, что некоторая библиотека PostgreSQL, которая используется драйвером Qt, записывает в stderr.

Ян может redicrect stderr так:

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

Спасибо, ханк. К сожалению, это также перенаправит другие сообщения в моем MessageHandler, которые в настоящее время выводятся на stderr (специально для qFatal и qCritical messages). Я надеялся избежать этого, если это возможно. – kh25

0

Для других людей с той же проблемой вы можете отключить предупреждение с этим кодом:

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

Но к сожалению, это означает, что проблема скрыта от вызывающий и обратная косая черта автоматически исчезают в базе данных, что может вызвать проблемы при получении данных позже.

Смежные вопросы