Esempio n. 1
0
 public function preDispatch($request)
 {
     try {
         $locale = new Zend_Locale();
         $locale->setDefault('en');
         $locale->setLocale(Zend_Locale::BROWSER);
         $requestedLanguage = key($locale->getBrowser());
         $formatter = new Zend_Log_Formatter_Simple('%message%' . PHP_EOL);
         $writer = new Zend_Log_Writer_Stream(APPLICATION_LOG_PATH . 'translations.log');
         $writer->setFormatter($formatter);
         $logger = new Zend_Log($writer);
         $frontendOptions = array('cache_id_prefix' => 'translation', 'lifetime' => 86400, 'automatic_serialization' => true);
         $backendOptions = array('cache_dir' => APPLICATION_CACHE_PATH);
         $cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
         $options = array('adapter' => 'gettext', 'scan' => Zend_Translate::LOCALE_FILENAME, 'content' => APPLICATION_PATH . '/languages/en/en.mo', 'locale' => 'auto', 'disableNotices' => true);
         $translate = new Zend_Translate($options);
         if (!$translate->isAvailable($locale->getLanguage())) {
             $locale->setLocale('en');
         } else {
             $translate->setLocale($locale);
         }
         $translate->setCache($cache);
         Zend_Registry::set('locale', $locale->getLanguage());
         Zend_Registry::set('Zend_Translate', $translate);
     } catch (Exception $e) {
         try {
             $writer = new Zend_Log_Writer_Stream(APPLICATION_LOG_PATH . 'plugin-locale.log');
             $logger = new Zend_Log($writer);
             $logger->log($e->getMessage(), Zend_Log::ERR);
         } catch (Exception $e) {
         }
     }
 }
Esempio n. 2
0
 private function log()
 {
     $dir = APP_PATH . '/logs/request';
     if (!is_dir($dir)) {
         mkdir($dir, 0755);
     }
     $file = $dir . '/' . date('Y-m-d') . '.log';
     $logger = new \Zend_Log();
     $formatter = new \Zend_Log_Formatter_Simple("%message%\n");
     $writer = new \Zend_Log_Writer_Stream($file);
     $writer->setFormatter($formatter);
     $logger->addWriter($writer);
     $data = array();
     $data[] = '[' . date('Y-m-d H:i:s') . '] ';
     $url = Http::getUrl('current');
     $url = substr($url, 0, strpos($url, '?')) . '?' . http_build_query($this->getRequest()->getRequest());
     $data[] = $url;
     $line = implode('', $data);
     $debug = Application::app()->getConfig()->debug;
     if ($debug) {
         $res = $this->getResponse()->getBody('api');
         $line .= "\n\t" . $res;
     }
     $logger->log($line, $logger::NOTICE);
 }
Esempio n. 3
0
	function addWriteToScreen()
	{
		parent::addWriteToScreen();
		$writerScreen = new Zend_Log_Writer_Stream('php://stderr');
		$writerScreen->setFormatter( $this->screenFormatter );
		$this->addWriter($writerScreen);
	}
Esempio n. 4
0
 /**
  * @return Zend_Log
  */
 public function init()
 {
     $bootstrap = $this->getBootstrap();
     $bootstrap->bootstrap('Config');
     $config = $bootstrap->getResource('Config');
     if (!$config->log->errors && !$config->log->sql) {
         return;
     }
     $logFile = LOGS_DIR . '/' . 'errors.log';
     if (!is_writable($logFile)) {
         throw new RuntimeException('Error log file cannot be written to. Please give this file read/write permissions for the web server.');
     }
     $writer = new Zend_Log_Writer_Stream($logFile);
     $logger = new Zend_Log($writer);
     if (isset($config->log->priority)) {
         $priority = $config->log->priority;
         if (defined($priority)) {
             $writer->addFilter(constant($priority));
         }
     }
     if (!empty($config->debug->email)) {
         $bootstrap->bootstrap('Mail');
         $this->_addMailWriter($logger, (string) $config->debug->email, $config->debug->emailLogPriority);
     }
     return $logger;
 }
Esempio n. 5
0
 /**
  * Setup db
  *
  */
 public function setup(Zend_Config $config)
 {
     // Get resource config
     $writerConfig = $config->writer;
     $filterConfig = $config->filter;
     // Log instance
     $log = new Zend_Log();
     // Enable database writer?
     if ($writerConfig->database->enabled) {
         $db = $this->getRegistry()->get($writerConfig->database->key, 'Zend_Db_Adapter_Abstract');
         // Make sure it's a right object
         if (!$db instanceof Zend_Db_Adapter_Abstract) {
             require_once 'Zym/App/Resource/Exception.php';
             throw new Zym_App_Resource_Exception('Resource ' . get_class($this) . ' requires the internal registry item "db" to contain a Zend_Db_Adapter_Abstract object');
         }
         $dbWriter = new Zend_Log_Writer_Db($db, $writerConfig->database->table);
         $log->addWriter($dbWriter);
     }
     // Enable stream writer?
     if ($writerConfig->stream->enabled) {
         $streamWriter = new Zend_Log_Writer_Stream($writerConfig->stream->stream, $writerConfig->stream->mode);
         $streamWriter->setFormatter(new Zend_Log_Formatter_Simple('%timestamp% %ipAddr% %priorityName% (%priority%): %message%' . PHP_EOL));
         $log->addWriter($streamWriter);
     }
     // Enable null writer
     $log->addWriter(new Zend_Log_Writer_Null());
     // Setup filters
     // Priority filter
     if ($filterConfig->priority->enabled) {
         $log->addFilter(new Zend_Log_Filter_Priority((int) $filterConfig->priority->level));
     }
     // Setup events
     // Log user ip address
     //$log->setEventItem('ipAddr', $_SERVER['REMOTE_ADDR']);
 }
Esempio n. 6
0
 /**
  * Add a stream writer
  * 
  * @param array $params
  * @param object $formatter
  * @return void 
  */
 public function addStreamWriter($params = array(), Zend_Log_Formatter_Interface $formatter = null)
 {
     $writer = new Zend_Log_Writer_Stream($params['file_path_url'], $params['mode']);
     if ($formatter) {
         $writer->setFormatter($formatter);
     }
     $this->addWriter($writer);
 }
Esempio n. 7
0
 public static function initDefault($logFilePath)
 {
     $writer = new Zend_Log_Writer_Stream($logFilePath);
     $format = '[%timestamp%] [%priorityName% %priority%] %message%' . PHP_EOL;
     $formatter = new Zend_Log_Formatter_Simple($format);
     $writer->setFormatter($formatter);
     Logger::registerLogger('default', $writer, null, true);
 }
 /**
  * Initialise the logger with the given file.
  */
 private function initLogger($logfileName)
 {
     $logfile = @fopen($logfileName, 'a', false);
     $writer = new Zend_Log_Writer_Stream($logfile);
     $formatter = new Zend_Log_Formatter_Simple('%priorityName%: %message%' . PHP_EOL);
     $writer->setFormatter($formatter);
     $this->logger = new Zend_Log($writer);
 }
Esempio n. 9
0
 /**
  * set logger
  * @return void
  */
 protected function _initLog()
 {
     // Error log
     $writer = new Zend_Log_Writer_Stream($this->_config->logpath);
     $format = '%timestamp% %priorityName% (%priority%): ' . '[%module%] [%controller%] %message%' . PHP_EOL;
     $formatter = new Zend_Log_Formatter_Simple($format);
     $writer->setFormatter($formatter);
     $logger = new Zend_Log($writer);
     Zend_Registry::getInstance()->set('logger', $logger);
 }
 public function saveCdrDedicatorias($resultado)
 {
     $name = date('YmdH');
     $datos = $this->registerCdr();
     $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../logs/cdr/' . $name . ".dedicatoria");
     $formatter = new Zend_Log_Formatter_Simple('%message%' . PHP_EOL);
     $writer->setFormatter($formatter);
     $log = new Zend_Log($writer);
     $mensaje = $datos['fecha'] . "," . $datos['hora'] . "," . $_SERVER['REMOTE_ADDR'] . "," . $datos['telefono'] . "," . 'perfil:' . $datos['perfil'] . "," . $resultado;
     $log->info($mensaje);
 }
Esempio n. 11
0
 private function saveCdrBanners($datos, $id, $name)
 {
     $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../logs/cdr/' . $name . ".banners");
     // $writer = new Zend_Log_Writer_Stream('/var/log/portalwap/'.$name.".banners");
     $formatter = new Zend_Log_Formatter_Simple('%message%' . PHP_EOL);
     $writer->setFormatter($formatter);
     $log = new Zend_Log($writer);
     $banners = 'banner1.' . $datos['url'][0] . "," . 'banner2.' . $datos['url'][1] . "," . 'banner3.' . $datos['url'][2] . "," . 'banner4.' . $datos['url'][3] . "," . 'banner5.' . $datos['url'][4];
     $mensaje = $datos['fecha'] . "," . $datos['hora'] . "," . $_SERVER['REMOTE_ADDR'] . "," . $datos['telefono'] . ",perfil:" . $datos['perfil'] . "," . $banners;
     $log->info($mensaje);
 }
Esempio n. 12
0
 /**
  * Initialize the logger. You may want to override the function
  *
  * @return void
  */
 protected function _setupLog()
 {
     $this->logger = new Streamwide_Log();
     $this->logger->setEventItem("class", get_class($this));
     $writer = new Zend_Log_Writer_Stream("php://output");
     $format = "SW | %class% | %timestamp% | %pid% | %memory% | %duration% | %priorityName%: %message%<br/>" . PHP_EOL;
     $formater = new Zend_Log_Formatter_Simple($format);
     $writer->setFormatter($formater);
     //$writer->addFilter(new Streamwide_Log_Filter_Priority(LOGGER_INFO));
     $this->logger->addWriter($writer);
 }
Esempio n. 13
0
 public function saveCdrLog($url, $message, $portal)
 {
     $datos = $this->obtenerPerfilNumero();
     $name = date('YmdH');
     $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../data/cdr/' . $portal . '/' . $name . ".log");
     $formatter = new Zend_Log_Formatter_Simple('%message%' . PHP_EOL);
     $writer->setFormatter($formatter);
     $log = new Zend_Log($writer);
     $mensaje = $datos['fecha'] . "," . $datos['hora'] . "," . 'PERFIL:' . $datos['perfil'] . "," . $url . "," . $message . "," . $datos['telefono'];
     $log->info($mensaje);
 }
Esempio n. 14
0
 protected function saveLog($errors)
 {
     $logger = new Zend_Log();
     $writer = new Zend_Log_Writer_Stream('application/tmp/erro/error.xml');
     $formatter = new Zend_Log_Formatter_Xml();
     $writer->setFormatter($formatter);
     $logger->addWriter($writer);
     $exception = $errors->exception;
     $exception->getTraceAsString();
     $logger->debug($exception->getMessage() . "\r\n");
 }
Esempio n. 15
0
 /**
  * Writer untuk log message yang lainnya
  * Log message yang lainnya akan dituliskan ke dalam file system.log
  */
 protected function _allWriter()
 {
     $log = ROOT_DIR . '/data/log/system.log';
     $stream = fopen($log, 'a', false);
     if (!$stream) {
         throw new Exception('Failed to open _writer stream');
     }
     $writer = new Zend_Log_Writer_Stream($stream);
     $writer->setFormatter($this->_formatter);
     return $writer;
 }
Esempio n. 16
0
 /**
  * Sets up the fixture, for example, opens a network connection.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     if (class_exists('Zend_Log') === false) {
         $this->markTestSkipped('Class \\Zend_Log not found');
     }
     $writer = new \Zend_Log_Writer_Stream('error.log');
     $formatter = new \Zend_Log_Formatter_Simple('log: %message%' . PHP_EOL);
     $writer->setFormatter($formatter);
     $logger = new \Zend_Log($writer);
     $filter = new \Zend_Log_Filter_Priority(\Zend_Log::INFO);
     $logger->addFilter($filter);
     $this->object = new \Aimeos\MW\Logger\Zend($logger);
 }
Esempio n. 17
0
 /**
  * Retrieves the logger object
  *
  * @return Zend_Log
  * @throws Glitch_Application_Resource_Exception
  */
 public function getLog()
 {
     if (null === $this->_log) {
         $options = $this->getOptions();
         // Force these options to be set - don't rely on the defaults!
         if (!isset($options['level'])) {
             throw new Glitch_Application_Resource_Exception('Undefined log option: "level"');
         }
         // Validate the log level
         $level = constant('Zend_Log::' . $options['level']);
         if (null === $level) {
             throw new Glitch_Application_Resource_Exception('Unknown log level: "' . $options['level'] . '"');
         }
         // Ensure the request is initialized
         $this->_bootstrap->bootstrap('Request');
         $request = $this->_bootstrap->getResource('Request');
         $isHttpRequest = $request instanceof Zend_Controller_Request_Http;
         // Use localhost as name if not running in HTTP mode
         $host = $isHttpRequest ? $request->getHttpHost() : 'localhost';
         if (strncasecmp($host, 'www.', 4) == 0) {
             $host = substr($host, 4);
             // Remove "www." prefix for readability
         }
         $this->_log = new Zend_Log();
         // Build filename, e.g. "20090601_localhost.log"
         $file = Zend_Date::now()->toString('yyyyMMdd') . '_' . $host . '.log';
         $file = GLITCH_LOGS_PATH . DIRECTORY_SEPARATOR . $file;
         $writer = new Zend_Log_Writer_Stream($file);
         // Use custom logging format, e.g.
         // [2010-08-07T17:03:18+02:00] ERR (/account/login): Method "_getParams" does not exist
         $format = '[%timestamp%] %priorityName%';
         if ($isHttpRequest) {
             $format .= ' (%requestUri%)';
             $this->_log->setEventItem('requestUri', $request->getRequestUri());
         }
         $format .= ': %message%';
         $formatter = new Zend_Log_Formatter_Simple($format . PHP_EOL);
         $writer->setFormatter($formatter);
         $this->_log->addWriter($writer);
         // Also send log output to browser console?
         if ($isHttpRequest && (isset($options['toFirebug']) && $options['toFirebug'])) {
             $this->_log->addWriter(new Zend_Log_Writer_Firebug());
         }
         $filter = new Zend_Log_Filter_Priority($level);
         $this->_log->addFilter($filter);
         // Allow application-wide access
         Glitch_Registry::setLog($this->_log);
     }
     return $this->_log;
 }
Esempio n. 18
0
 protected function _initSystemLog()
 {
     $sysLogFile = Agana_Util_Log::getSystemLogPath($this);
     $fp = @fopen($sysLogFile, 'a+', false);
     if ($fp) {
         $sysLog = new Zend_Log_Writer_Stream($fp);
         $formatter = new Zend_Log_Formatter_Xml();
         $sysLog->setFormatter($formatter);
     } else {
         // TODO improve this
         die('App error log file or directory is not writable');
     }
     $systemLogger = new Zend_Log($sysLog);
     Zend_Registry::set(self::APP_ERROR_LOGGER, $systemLogger);
 }
Esempio n. 19
0
 /**
  * Init default logger
  *
  * @return Zend_Log_Writer_Abstract
  */
 private function _initDefaultWriter()
 {
     $writer = Zend_Log_Writer_Stream::factory(['stream' => Mage::getBaseDir('log') . DS . Mage::getStoreConfig('messenger/log/file')]);
     $formatter = Mage::getModel('messenger/log_formatter')->factory(Mage::getStoreConfig('messenger/log/format'));
     $writer->setFormatter($formatter);
     return $writer;
 }
Esempio n. 20
0
 /**
  * Setup console logger
  *
  * @return void
  */
 private function _initLogger()
 {
     $writer = Zend_Log_Writer_Stream::factory(['stream' => 'php://stdout']);
     $formatter = Mage::getModel('messenger/log_formatter')->factory($this->getArg('log-format'));
     $writer->setFormatter($formatter);
     Mage::getSingleton('messenger/di')->container()->instanceManager()->setParameters('log', ['writer' => $writer]);
 }
Esempio n. 21
0
 protected function _write($event)
 {
     /* First we will try to write a log entry to database */
     if (Mage::helper('inchoo_logger')->isModuleEnabled(Mage::app()->getStore()->getId())) {
         $logger = Mage::getModel('inchoo_logger/logger');
         $logger->setTimestamp($event['timestamp']);
         $logger->setMessage($event['message']);
         $logger->setPriority($event['priority']);
         $logger->setPriorityName($event['priorityName']);
         $logger->setWebsite(Mage::app()->getWebsite()->getId());
         $logger->setWebsiteName(Mage::app()->getWebsite()->getName());
         $logger->setStore(Mage::app()->getStore()->getId());
         $logger->setStoreName(Mage::app()->getStore()->getName());
         $logger->setArea(Mage::getSingleton('core/design_package')->getArea());
         if (is_string(self::$_ilfp)) {
             $logger->setFile(self::$_ilfp);
         }
         /* Check if admin user is logged in, if it is then add its info to the log entry */
         $user = Mage::getSingleton('admin/session')->getUser();
         if ($user && $user->getId()) {
             $logger->setUser($user->getId());
             $logger->setUserEmail($user->getEmail());
         }
         /* Check if customer is logged in, if it is then add its info to the log entry */
         $customer = Mage::getSingleton('customer/session')->getCustomer();
         if ($customer && $customer->getId()) {
             $logger->setCustomer($customer->getId());
             $logger->setCustomerEmail($customer->getEmail());
         }
         $request = Mage::app()->getRequest();
         if ($request instanceof Mage_Core_Controller_Request_Http) {
             $dt = new DateTime('now');
             /* $dt->format('Y-m-d H:i:s') */
             $logger->setCreatedAt($dt->format('Y-m-d H:i:s'));
             $logger->setRequestMethod($request->getMethod());
             $logger->setRequestModuleName($request->getModuleName());
             $logger->setRequestBaseUrl($request->getBaseUrl());
             $logger->setRequestRequestUri($request->getRequestUri());
             $logger->setRequestControllerName($request->getControllerName());
             $logger->setRequestActionName($request->getActionName());
             $logger->setRequestClientIp($request->getClientIp());
             if (Mage::helper('inchoo_logger')->logRequestParams()) {
                 if ($params = $request->getParams()) {
                     $params = serialize($params);
                     $params = Mage::helper('core')->encrypt($params);
                     $logger->setRequestParams($params);
                 }
             }
         }
         try {
             $logger->save();
         } catch (Exception $e) {
             echo $e->getMessage();
             exit;
             /* Silently die... */
         }
     }
     /* Now pass the execution to original parent code */
     return parent::_write($event);
 }
Esempio n. 22
0
 public function testFilterOnSpecificWriter()
 {
     $log2 = fopen('php://memory', 'w');
     $writer2 = new Zend_Log_Writer_Stream($log2);
     $writer2->addFilter(Zend_Log::ERR);
     $this->logger->addWriter($writer2);
     $this->logger->warn($warn = 'warn-message');
     $this->logger->err($err = 'err-message');
     rewind($this->log);
     $logdata = stream_get_contents($this->log);
     $this->assertContains($warn, $logdata);
     $this->assertContains($err, $logdata);
     rewind($log2);
     $logdata = stream_get_contents($log2);
     $this->assertContains($err, $logdata);
     $this->assertNotContains($warn, $logdata);
 }
Esempio n. 23
0
 private function _zendlog()
 {
     $write = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/log/log.txt');
     $format = new Zend_Log_Formatter_Simple('%message%');
     $write->setFormatter($format);
     $log = new Zend_Log($write);
     $log->info('thong bao', Zend_Log::INFO);
     $log->err('thong bao loi', Zend_Log::ERR);
     //        $write= new Zend_Log_Writer_Stream(APPLICATION_PATH.'/log/log.txt');
     //
     //        $log->info('thong bao', Zend_Log::INFO);
     //        $log->err('thong bao loi', Zend_Log::ERR);
     //
     //
     //
     //         $log = new Zend_Log($write);
 }
Esempio n. 24
0
 private function __construct()
 {
     $config = Zend_Registry::get('config');
     /* Set up a stream logger to a file. */
     if ($config->logger->filename == null) {
         $writer = new Zend_Log_Writer_Stream('php://output');
     } else {
         $writer = new Zend_Log_Writer_Stream($config->logger->filename);
     }
     switch ($config->logger->level) {
         case "FATAL":
             $writer->addFilter(Zend_Log::CRIT);
             break;
         case "ERROR":
             $writer->addFilter(Zend_Log::ERR);
             break;
         case "WARN":
             $writer->addFilter(Zend_Log::WARN);
             break;
         case "INFO":
             $writer->addFilter(Zend_Log::INFO);
             break;
         case "DEBUG":
             $writer->addFilter(Zend_Log::DEBUG);
             break;
         default:
             $writer->addFilter(Zend_Log::WARN);
             break;
     }
     $this->_zLogger = new Zend_Log($writer);
 }
Esempio n. 25
0
 /**
  * Retrieve the singleton logger instance, creating it if necessary.
  *
  * @return Returns the logger.
  */
 public static function getLogger()
 {
     // Make sure the logger has been created.
     if (self::$logger === null) {
         // Define the logging format.
         $format = '%timestamp% %priorityName% %message%' . PHP_EOL;
         // Create the formatter.
         $formatter = new Zend_Log_Formatter_Simple($format);
         // Create the new writer for the log file.
         $writer = new Zend_Log_Writer_Stream(Bootstrap::$root . '/logs/app.log');
         // Set the writer format.
         $writer->setFormatter($formatter);
         // Create the logger.
         self::$logger = new Zend_Log($writer);
     }
     // Return the logger.
     return self::$logger;
 }
Esempio n. 26
0
 private static function getWriter(Zend_Config $config)
 {
     if ($config->name === null) {
         return null;
     }
     $writer = null;
     switch ($config->name) {
         case "Zend_Log_Writer_Stream":
             if ($config->stream === null) {
                 return null;
             }
             if ($config->mode === null) {
                 $mode = 'a';
             }
             $writer = new Zend_Log_Writer_Stream($config->stream, $mode);
             break;
     }
     if ($writer !== null && $config->formatters !== null) {
         foreach ($config->formatters as $formatterConfig) {
             $formatter = self::getFormatter($formatterConfig);
             if ($formatter !== null) {
                 $writer->setFormatter($formatter);
             }
         }
     }
     if ($writer !== null && $config->formatters !== null) {
         foreach ($config->formatters as $formatterConfig) {
             $formatter = self::getFormatter($formatterConfig);
             if ($formatter !== null) {
                 $writer->setFormatter($formatter);
             }
         }
     }
     if ($writer !== null && $config->filters !== null) {
         foreach ($config->filters as $filterConfig) {
             $formatter = self::getFilter($filterConfig);
             if ($formatter !== null) {
                 $writer->addFilter($formatter);
             }
         }
     }
     return $writer;
 }
Esempio n. 27
0
 /**
  * Initializes the logger
  */
 protected function _initLog()
 {
     $logger = new Zend_Log();
        
     if (Zend_Registry::get('option-logOn')) {
         $writer = new Zend_Log_Writer_Stream(realpath(Zend_Registry::get('option-logDir') . '/' . Zend_Registry::get('option-logFile')));
         
         $format = '%timestamp%, %ip%, %cachehit%, %message%' . PHP_EOL;
         $formatter = new Zend_Log_Formatter_Simple($format);
       
         $writer->setFormatter($formatter);
     } else {
         $writer = new Zend_Log_Writer_Null;
     }
     
     $logger->addWriter($writer);
     
     Zend_Registry::set('logger', $logger);
 }
Esempio n. 28
0
 /**
  * Close the stream resource.
  *
  * @return void
  */
 public function shutdown()
 {
     try {
         $this->_writeRepeated();
     } catch (Zend_Log_Exception $e) {
         // No problem if it should fail, don't want to break the program
     }
     // Close the file
     parent::shutdown();
 }
Esempio n. 29
0
 public static function toLog($message, $level = Zend_Log::INFO, $file = 'system_log.txt')
 {
     $filename = implode(DIRECTORY_SEPARATOR, array(RM_Environment::getConnector()->getCorePath(), 'userdata', 'logs', $file));
     if (is_file($filename) == false) {
         return false;
     }
     if (is_writable($filename) == false) {
         return false;
     }
     try {
         $stream = new Zend_Log_Writer_Stream($filename);
         $logger = new RM_Log($stream);
         $logger->log($message, $level);
         $stream->shutdown();
         return true;
     } catch (Exception $e) {
         return false;
     }
 }
Esempio n. 30
0
 private function createWriter($logfilePath = null)
 {
     $GLOBALS['id_string'] = uniqid();
     // Write ID string to global variables, so we can identify/match individual runs.
     $format = '%timestamp% %priorityName% (%priority%, ID ' . $GLOBALS['id_string'] . '): %message%' . PHP_EOL;
     $formatter = new Zend_Log_Formatter_Simple($format);
     if (is_null($logfilePath)) {
         $writer = new Zend_Log_Writer_Stream('php://output');
     } else {
         $logfile = @fopen($logfilePath, 'a', false);
         if ($logfile === false) {
             // TODO use Opus exception
             throw new Exception('Failed to open logging file:' . $logfilePath);
         }
         $writer = new Zend_Log_Writer_Stream($logfile);
     }
     $writer->setFormatter($formatter);
     return $writer;
 }