Here what Zend_Log_Writer_Syslog could look like: class Zend_Log_Writer_Syslog extends Zend_Log_Writer_Abstract { /** * Maps Zend_Log priorities to PHP's syslog priorities * @var array */ protected $_priorities = array(Zend_Log::EMERG => LOG_EMERG, Zend_Log::ALERT => LOG_ALERT, Zend_Log::CRIT => LOG_CRIT, Zend_Log::ERR => LOG_ERR, Zend_Log::WARN => LOG_WARNING, Zend_Log::NOTICE => LOG_NOTICE, Zend_Log::INFO => LOG_INFO, Zend_Log::DEBUG => LOG_DEBUG);
/** * The default log priority - for unmapped custom priorities * @var string */ protected $_defaultPriority = LOG_NOTICE; public function __construct($application = 'Zend_Log') { if (false === @openlog($application, LOG_PID, LOG_USER)) { throw new Zend_Log_Exception('Cannot connect to syslog'); } } /** * Close syslog. * * @return void */ public function shutdown() { @closelog(); } /** * Write a message to syslog. * * @param array $event event data * @return void */ protected function _write($event) { if (array_key_exists($event['priority'], $this->_priorities)) { $priority = $this->_priorityStyles[$event['priority']]; } else { $priority = $this->_defaultPriority; } if (false === @syslog($priority, $event['message'])) { throw new Zend_Log_Exception('Unable to write to syslog'); } } } Even if LOG_USER should be fine for most users (it is available on Windows too) methods allowing to change facility could be added, the rest should be fine. Could someone test if this would "work out of the box" on windows? Cheers, Thomas NB: I'm not sure about the @'s in front of the syslog functions - as syslog is working fine on all of my systems I never experienced such an error ;-) If no one knows I'll test it - if there is even one single scenario producing a PHP-notice they have to stay there. Thomas Gelf schrieb:
Hi list, as surely most of you have a lot of free time available I'll throw in a new old topic to hopefully be discussed in this round ;-) It's about logging. I like Zend_Log, it's well done - but the writers currently available are not an option for most of my projects. Let's make some example: * stream writers writing to local files are running fine, are not blocking parallel requests and should be ok so far if you just want your logs to be written down somewhere * it's difficult to set up a secure environment allowing PHP scripts running under different UIDs writing to the same log file (mostly leading to insecure logfile permissions or strange hacks) * hacked PHP sites are able to modify (application) log entries if PHP is able to write to them * if you want a cronjob to rotate log files for a PHP-written daemon you have to implement signal handlers (who has ever done so knows that this could be a really funny task) * writing to DB is great for small projects - but impossible for sites with heavy traffic. If you want to handle high loads your application should be able to serve most requests without the need to connect to your database cluster * ZF documentation should make people aware of locking and therefore performance issues when using MyISAM instead of InnoDB on MySQL * who wants to achieve a distributed centralized logging is currently either forced to write it's own syslog writer or probably going to reimplement things syslog would usually do for you Said all this: why is there still no Zend_Log_Writer_Syslog? Windows is no excuse - PHP's syslog() function exists also there, so we should be able to satisfy ZF's rules. And those rare windows people taking care of their logs will surely be able to find out where they are going to finish ;-) We should however avoid LOCAL*-facilities, as far as I know (didn't test it) they are not available on windows. Thanks for your feedback - and have a nice weekend! Regards, Thomas Gelf