将stdout和stderr重定向到c ++中的文件

时间:2015-11-18 05:42:20

标签: c++ linux logging stdout

我正在尝试将stdout和stderr重定向到日志文件。

/* Redirecting stderr buffer to stdout */
dup2(fileno(stdout), fileno(stderr));

/* Redirecting stdout buffer to logfile */
    if((LogStream = freopen(LogPath.c_str(), "w", stdout)) == NULL)
    {
            cout << "Failed to redirect console logs\n";
    }   

.
.
. //other code
.
.
fclose(LogStream);
LogStream = freopen (NULL_LOG, "w", stdout);

这就是我在做的事情。但我仍然错过了一些日志。我开始知道当我执行我的应用程序时注释掉这些代码行。我对这段代码片段持怀疑态度。请提供您的反馈意见。

1 个答案:

答案 0 :(得分:2)

首先关闭stdout和stderr

close(STDOUT_FILENO);
close(STDERR_FILENO)

打开新文件以将日志写入。

int file = open( "logfile", O_CREAT | O_RDWR, 0644 );

复制日志文件描述符以与stdout和stderr一起使用。见man dup2

dup2( file, STDOUT_FILENO);
dup2( file, STDERR_FILENO);

我希望上面的代码可以帮助你..