【问题标题】:Redirecting stdout and stderr to a file in c++将stdout和stderr重定向到c ++中的文件
【发布时间】:2016-02-19 17:57:58
【问题描述】:

我正在尝试将 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);

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

【问题讨论】:

  • 我认为您应该提供更多上下文。哪些消息不在日志中?何时何地在代码上触发了它们?这些方面应该可以回答您的问题。

标签: c++ linux logging stdout


【解决方案1】:

先关闭stdout和stderr

close(STDOUT_FILENO);
close(STDERR_FILENO)

打开新文件以写入日志。

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

复制用于标准输出和标准错误的日志文件文件描述符。见man dup2

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

希望以上代码对你有所帮助..

【讨论】:

  • 标志是“O_CREAT”而不是“O_CREATE”
  • 这是一个错字。我的错。谢谢你指点。我更正了。
猜你喜欢
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多