我正在使用一些第三方库,它使用 stderr 打印错误并且它没有提供任何日志回调。我正在使用 linuxdaemon调用来创建进程的守护进程。
有没有办法可以在守护进程调用后将 stderr 设置为文件?
使用open系统调用打开文件,然后执行以下操作:dup2(filefd, 2). 这将设置stderr为打开的文件。然后就可以了close(filefd)。你可以做openbefore call daemon,但我不推荐 the dup2and later closeuntil 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();