- <?php
- /**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
-
- namespace Zend\Log\Writer;
-
- use Traversable;
- use Zend\Log\Exception;
- use Zend\Log\Formatter\Simple as SimpleFormatter;
- use Zend\Stdlib\ErrorHandler;
-
- class Stream extends AbstractWriter
- {
- /**
- * Separator between log entries
- *
- * @var string
- */
- protected $logSeparator = PHP_EOL;
-
- /**
- * Holds the PHP stream to log to.
- *
- * @var null|stream
- */
- protected $stream = null;
-
- /**
- * Constructor
- *
- * @param string|resource|array|Traversable $streamOrUrl Stream or URL to open as a stream
- * @param string|null $mode Mode, only applicable if a URL is given
- * @param null|string $logSeparator Log separator string
- * @return Stream
- * @throws Exception\InvalidArgumentException
- * @throws Exception\RuntimeException
- */
- public function __construct($streamOrUrl, $mode = null, $logSeparator = null)
- {
- if ($streamOrUrl instanceof Traversable) {
- $streamOrUrl = iterator_to_array($streamOrUrl);
- }
-
- if (is_array($streamOrUrl)) {
- parent::__construct($streamOrUrl);
- $mode = isset($streamOrUrl['mode']) ? $streamOrUrl['mode'] : null;
- $logSeparator = isset($streamOrUrl['log_separator']) ? $streamOrUrl['log_separator'] : null;
- $streamOrUrl = isset($streamOrUrl['stream']) ? $streamOrUrl['stream'] : null;
- }
-
- // Setting the default mode
- if (null === $mode) {
- $mode = 'a';
- }
-
- if (is_resource($streamOrUrl)) {
- if ('stream' != get_resource_type($streamOrUrl)) {
- throw new Exception\InvalidArgumentException(sprintf(
- 'Resource is not a stream; received "%s',
- get_resource_type($streamOrUrl)
- ));
- }
-
- if ('a' != $mode) {
- throw new Exception\InvalidArgumentException(sprintf(
- 'Mode must be "a" on existing streams; received "%s"',
- $mode
- ));
- }
-
- $this->stream = $streamOrUrl;
- } else {
- ErrorHandler::start();
- $this->stream = fopen($streamOrUrl, $mode, false);
- $error = ErrorHandler::stop();
- if (!$this->stream) {
- throw new Exception\RuntimeException(sprintf(
- '"%s" cannot be opened with mode "%s"',
- $streamOrUrl,
- $mode
- ), 0, $error);
- }
- }
-
- if (null !== $logSeparator) {
- $this->setLogSeparator($logSeparator);
- }
-
- if ($this->formatter === null) {
- $this->formatter = new SimpleFormatter();
- }
- }
-
- /**
- * Write a message to the log.
- *
- * @param array $event event data
- * @return void
- * @throws Exception\RuntimeException
- */
- protected function doWrite(array $event)
- {
- $line = $this->formatter->format($event) . $this->logSeparator;
- fwrite($this->stream, $line);
- }
-
- /**
- * Set log separator string
- *
- * @param string $logSeparator
- * @return Stream
- */
- public function setLogSeparator($logSeparator)
- {
- $this->logSeparator = (string) $logSeparator;
- return $this;
- }
-
- /**
- * Get log separator string
- *
- * @return string
- */
- public function getLogSeparator()
- {
- return $this->logSeparator;
- }
-
- /**
- * Close the stream resource.
- *
- * @return void
- */
- public function shutdown()
- {
- if (is_resource($this->stream)) {
- fclose($this->stream);
- }
- }
- }
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
9 years ago
|
|