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. 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. 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. 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
Archived
This topic is now archived and is closed to further replies.