2015-11-18 104 views
0

我正在嘗試將stdout和stderr重定向到日誌文件。將stdout和stderr重定向到C++中的文件

/* 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); 

這就是我正在做的。但是我仍然錯過了一些日誌。我開始知道,當我執行我的應用程序註釋掉這些代碼行。我對這段代碼有疑問。請提供您的反饋意見。

+0

我認爲你應該提供更多的上下文。什麼是不在日誌中的消息?何時何地觸發代碼?這些方面應該回答你的問題。 –

回答

2

首先關閉輸出和錯誤

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); 

我希望上面的代碼幫助你..

+0

標記爲「O_CREAT」而不是「O_CREATE」 –

+0

這是一個錯字。我的錯。感謝您指出它。我糾正了它。 –

相關問題