Skip to content
Advertisement

Redirecting stdout and stderr to a file in c++

I am trying to redirect stdout and stderr to a log file.

/* 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 logsn";
    }   

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

This is what i am doing. But still i am missing out some of the logs. I came to know that when i executed my application commenting out these lines of code. I am dubious about this code snippet. Please provide your feedback on this.

Advertisement

Answer

first close stdout and stderr

close(STDOUT_FILENO);
close(STDERR_FILENO)

open new file to write logs to.

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

duplicate the logfile file descriptor to use with stdout and stderr. see man dup2

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

I hope above code help you..

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement