bryan11 Posted October 18, 2006 Share Posted October 18, 2006 For several scripts run by cron on a linux/mysql system, I'd like to log all stdout and stderr output to a file. I'm currently using this code to manually write to a log file:$scriptName = "checkStores"; # For checkStores.php$logPath = "/usr/local/company/bin/logs/";$logPathAndFile = $logPath . $scriptName . ".log";$logStart = "\n\n----" . date("Y-m-d H:i:s") . "----\nLog entry for " . $scriptName . ".php\n";if (!$log = fopen($logPathAndFile,"a")) { echo "Cannot open log file [$logFile]\n"; }if (!fwrite($log, $logStart)) { echo "Cannot write to log file [$logFile]\n"; }This works, but all log entries are manual and stderr output goes to the system log. Is there a way to redirect all stdout and stderr to a log file?Here's perl code I've recently used to log everything (stdout and stderr) to a file. An equivalent function in php is what I'm trying to build.sub createLog{my $logFile = shift;open ( STDERR, ">>$logFile" );open ( STDOUT, ">>$logFile" );open LOG, ">>$logFile" || die "$0: Can't open log file!";select( LOG );$| = 1; # Turn on buffer autoflush for log outputprint "$0: Starting script ...\n";select( STDOUT );}I know that one can redirect I/O from the shell, but I'd prefer to so do this within each php script. Quote Link to comment https://forums.phpfreaks.com/topic/24375-redirecting-stdout-and-stderr-to-log-file/ Share on other sites More sharing options...
bryan11 Posted October 20, 2006 Author Share Posted October 20, 2006 Anyone? You can't redirect stderr and stdout to a file in PHP?I see some extensive error handling code in the PHP manual but can't find much on redirecting output within PHP. Quote Link to comment https://forums.phpfreaks.com/topic/24375-redirecting-stdout-and-stderr-to-log-file/#findComment-111820 Share on other sites More sharing options...
Daniel0 Posted October 20, 2006 Share Posted October 20, 2006 Make your own function like this: [code]<?phpfunction my_fprintf($format,$stream=STDOUT){ $args = func_get_args(); if(count($args) > 2) { unset($args[0]); unset($args[1]); $args = array_map('addslashes',$args); $eval = "\$string = sprintf(\$format,'".join("','",$args)."');"; eval($eval); } else { $string = sprintf($format,$stream); } $fp = @fopen('file.txt','w'); @fwrite($string."\n"); @fclose($fp); fprintf($string,$stream);}my_fprintf("%s %s",STDOUT,"test","te'st2");?>[/code]Not tested. Quote Link to comment https://forums.phpfreaks.com/topic/24375-redirecting-stdout-and-stderr-to-log-file/#findComment-111843 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.