2020-04-07 13:03:04 +00:00
< ? php
/*
* This file is part of the Monolog package .
*
* ( c ) Jordi Boggiano < j . boggiano @ seld . be >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Monolog\Handler ;
use Monolog\Formatter\FormatterInterface ;
use Monolog\Formatter\LineFormatter ;
use Monolog\Logger ;
use Monolog\ResettableInterface ;
/**
* Base Handler class providing the Handler structure
*
* @ author Jordi Boggiano < j . boggiano @ seld . be >
*/
abstract class AbstractHandler implements HandlerInterface , ResettableInterface
{
protected $level = Logger :: DEBUG ;
protected $bubble = true ;
/**
* @ var FormatterInterface
*/
protected $formatter ;
protected $processors = array ();
/**
2020-06-20 17:12:03 +00:00
* @ param int | string $level The minimum logging level at which this handler will be triggered
* @ param bool $bubble Whether the messages that are handled can bubble up the stack or not
2020-04-07 13:03:04 +00:00
*/
public function __construct ( $level = Logger :: DEBUG , $bubble = true )
{
$this -> setLevel ( $level );
$this -> bubble = $bubble ;
}
/**
* { @ inheritdoc }
*/
public function isHandling ( array $record )
{
return $record [ 'level' ] >= $this -> level ;
}
/**
* { @ inheritdoc }
*/
public function handleBatch ( array $records )
{
foreach ( $records as $record ) {
$this -> handle ( $record );
}
}
/**
* Closes the handler .
*
* This will be called automatically when the object is destroyed
*/
public function close ()
{
}
/**
* { @ inheritdoc }
*/
public function pushProcessor ( $callback )
{
if ( ! is_callable ( $callback )) {
throw new \InvalidArgumentException ( 'Processors must be valid callables (callback or object with an __invoke method), ' . var_export ( $callback , true ) . ' given' );
}
array_unshift ( $this -> processors , $callback );
return $this ;
}
/**
* { @ inheritdoc }
*/
public function popProcessor ()
{
if ( ! $this -> processors ) {
throw new \LogicException ( 'You tried to pop from an empty processor stack.' );
}
return array_shift ( $this -> processors );
}
/**
* { @ inheritdoc }
*/
public function setFormatter ( FormatterInterface $formatter )
{
$this -> formatter = $formatter ;
return $this ;
}
/**
* { @ inheritdoc }
*/
public function getFormatter ()
{
if ( ! $this -> formatter ) {
$this -> formatter = $this -> getDefaultFormatter ();
}
return $this -> formatter ;
}
/**
* Sets minimum logging level at which this handler will be triggered .
*
* @ param int | string $level Level or level name
* @ return self
*/
public function setLevel ( $level )
{
$this -> level = Logger :: toMonologLevel ( $level );
return $this ;
}
/**
* Gets minimum logging level at which this handler will be triggered .
*
* @ return int
*/
public function getLevel ()
{
return $this -> level ;
}
/**
* Sets the bubbling behavior .
*
* @ param bool $bubble true means that this handler allows bubbling .
* false means that bubbling is not permitted .
* @ return self
*/
public function setBubble ( $bubble )
{
$this -> bubble = $bubble ;
return $this ;
}
/**
* Gets the bubbling behavior .
*
* @ return bool true means that this handler allows bubbling .
* false means that bubbling is not permitted .
*/
public function getBubble ()
{
return $this -> bubble ;
}
public function __destruct ()
{
try {
$this -> close ();
} catch ( \Exception $e ) {
// do nothing
} catch ( \Throwable $e ) {
// do nothing
}
}
public function reset ()
{
foreach ( $this -> processors as $processor ) {
if ( $processor instanceof ResettableInterface ) {
$processor -> reset ();
}
}
}
/**
* Gets the default formatter .
*
* @ return FormatterInterface
*/
protected function getDefaultFormatter ()
{
return new LineFormatter ();
}
}