Jump to content

Redirecting stdout and stderr to log file


bryan11

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

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

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.