Jump to content

Archived

This topic is now archived and is closed to further replies.

bryan11

Redirecting stdout and stderr to log file

Recommended Posts

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 output
print "$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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
Make your own function like this: [code]<?php
function 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.

Share this post


Link to post
Share on other sites

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.