我正在使用一些第三方库,它使用 stderr 打印错误并且它没有提供任何日志回调。我正在使用 linuxdaemon
调用来创建进程的守护进程。
有没有办法可以在守护进程调用后将 stderr 设置为文件?
使用open
系统调用打开文件,然后执行以下操作:dup2(filefd, 2)
. 这将设置stderr
为打开的文件。然后就可以了close(filefd)
。你可以做open
before call daemon
,但我不推荐 the dup2
and later close
until after after call daemon
。
在使用第三方库的代码中,您可以“重新路由”stderr 流。
例如:
std::ofstream outputFileStream;
outputFileStream.open ("outputfile.txt");
std::streambuf * yourStreamBuffer = outputFileStream.rdbuf();
std::cerr.rdbuf(yourStreamBuffer);
std::cerr << "Ends up in the file, not std::cerr!";
outputFileStream.close();