Здравствуйте, pzhy, Вы писали:
P>Здравствуйте, as90, Вы писали:
A>>Есть желание логировать все сообщения в программе в файл определено складывая данные.
A>>Если данные записываются в cerr с помощью потоков std::cerr<<
A>>тут решение я нашел можно у потока cerr сменить буфер и делать с сообщениями что угодно.
A>>Но у меня есть проблема в том что есть некоторые библиотеки собранные другим компилятором, то есть Runtime у этой либы свой и такой прием не работает.
A>>в nix можно перенаправить поток ошибок с помощью функции dup2, но хотелось бы иметь возможность еще форматировать этот вывод, то есть лучше всего иметь функцию которая вызывается при записи данных в cerr.
A>>в nix опыть же можно использовать pipe и fork для отлова таких сообщений, в винде fork нету, так что этот способ не работает.
A>>Нет ли более изящного способа и чтоб работал и под linux и под windows с компилятором mingw?
P>Для вин возможно использовать cygwin? Думаю для вин можно сделать тоже самое с помощью Psh. Сделать скрипт.
P>Можно использовать freopen (если она есть в вин):
P>P>freopen("my.log","w",stderr);
P>
В mingw работает и dup2 -функция перенаправления файловых потоков, что на мой взгляд удобнее чем freopen, так как в этот же файл можно писать не только через файловый поток cerr
у такого способа есть минус невозможно как-то обравить прилетевшие данные, в текущем логере программы к всем данным прилетевшим добавляет время, когда эти сообщения пришли.
Как я позже нарыл можно все же использовать win api
BOOL WINAPI SetStdHandle(
_In_ DWORD nStdHandle,
_In_ HANDLE hHandle
);
но это платформозависимое решение.
(
http://msdn.microsoft.com/en-us/library/ms686244(VS.85).aspx)
Думаю тогда воспользуюсь либо батников, который будет перенаправлять вывод в файл, либо через pipe.