diff --git a/src/Monolog/Handler/StreamHandler.php b/src/Monolog/Handler/StreamHandler.php index 561d9c75..64aaa344 100644 --- a/src/Monolog/Handler/StreamHandler.php +++ b/src/Monolog/Handler/StreamHandler.php @@ -41,6 +41,8 @@ class StreamHandler extends AbstractProcessingHandler protected $filePermission; /** @var bool */ protected $useLocking; + /** @var string */ + protected $fileOpenMode; /** @var true|null */ private $dirCreated = null; @@ -48,10 +50,11 @@ class StreamHandler extends AbstractProcessingHandler * @param resource|string $stream If a missing path can't be created, an UnexpectedValueException will be thrown on first write * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) * @param bool $useLocking Try to lock log file before doing any writes + * @param string $fileOpenMode The fopen() mode used when opening a file, if $stream is a file path * * @throws \InvalidArgumentException If stream is not a resource or string */ - public function __construct($stream, $level = Logger::DEBUG, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false) + public function __construct($stream, $level = Logger::DEBUG, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false, $fileOpenMode = 'a') { parent::__construct($level, $bubble); @@ -78,6 +81,7 @@ class StreamHandler extends AbstractProcessingHandler throw new \InvalidArgumentException('A stream must either be a resource or a string.'); } + $this->fileOpenMode = $fileOpenMode; $this->filePermission = $filePermission; $this->useLocking = $useLocking; } @@ -138,7 +142,7 @@ class StreamHandler extends AbstractProcessingHandler return $this->customErrorHandler(...$args); }); try { - $stream = fopen($url, 'a'); + $stream = fopen($url, $this->fileOpenMode); if ($this->filePermission !== null) { @chmod($url, $this->filePermission); }