Viewing file: Logger.php (7.2 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Illuminate\Log;
use Closure; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Jsonable; use Illuminate\Log\Events\MessageLogged; use Psr\Log\LoggerInterface; use RuntimeException;
class Logger implements LoggerInterface { /** * The underlying logger implementation. * * @var \Psr\Log\LoggerInterface */ protected $logger;
/** * The event dispatcher instance. * * @var \Illuminate\Contracts\Events\Dispatcher|null */ protected $dispatcher;
/** * Any context to be added to logs. * * @var array */ protected $context = [];
/** * Create a new log writer instance. * * @param \Psr\Log\LoggerInterface $logger * @param \Illuminate\Contracts\Events\Dispatcher|null $dispatcher * @return void */ public function __construct(LoggerInterface $logger, Dispatcher $dispatcher = null) { $this->logger = $logger; $this->dispatcher = $dispatcher; }
/** * Log an emergency message to the logs. * * @param string $message * @param array $context * @return void */ public function emergency($message, array $context = []) { $this->writeLog(__FUNCTION__, $message, $context); }
/** * Log an alert message to the logs. * * @param string $message * @param array $context * @return void */ public function alert($message, array $context = []) { $this->writeLog(__FUNCTION__, $message, $context); }
/** * Log a critical message to the logs. * * @param string $message * @param array $context * @return void */ public function critical($message, array $context = []) { $this->writeLog(__FUNCTION__, $message, $context); }
/** * Log an error message to the logs. * * @param string $message * @param array $context * @return void */ public function error($message, array $context = []) { $this->writeLog(__FUNCTION__, $message, $context); }
/** * Log a warning message to the logs. * * @param string $message * @param array $context * @return void */ public function warning($message, array $context = []) { $this->writeLog(__FUNCTION__, $message, $context); }
/** * Log a notice to the logs. * * @param string $message * @param array $context * @return void */ public function notice($message, array $context = []) { $this->writeLog(__FUNCTION__, $message, $context); }
/** * Log an informational message to the logs. * * @param string $message * @param array $context * @return void */ public function info($message, array $context = []) { $this->writeLog(__FUNCTION__, $message, $context); }
/** * Log a debug message to the logs. * * @param string $message * @param array $context * @return void */ public function debug($message, array $context = []) { $this->writeLog(__FUNCTION__, $message, $context); }
/** * Log a message to the logs. * * @param string $level * @param string $message * @param array $context * @return void */ public function log($level, $message, array $context = []) { $this->writeLog($level, $message, $context); }
/** * Dynamically pass log calls into the writer. * * @param string $level * @param string $message * @param array $context * @return void */ public function write($level, $message, array $context = []) { $this->writeLog($level, $message, $context); }
/** * Write a message to the log. * * @param string $level * @param string $message * @param array $context * @return void */ protected function writeLog($level, $message, $context) { $this->logger->{$level}( $message = $this->formatMessage($message), $context = array_merge($this->context, $context) );
$this->fireLogEvent($level, $message, $context); }
/** * Add context to all future logs. * * @param array $context * @return $this */ public function withContext(array $context = []) { $this->context = array_merge($this->context, $context);
return $this; }
/** * Flush the existing context array. * * @return $this */ public function withoutContext() { $this->context = [];
return $this; }
/** * Register a new callback handler for when a log event is triggered. * * @param \Closure $callback * @return void * * @throws \RuntimeException */ public function listen(Closure $callback) { if (! isset($this->dispatcher)) { throw new RuntimeException('Events dispatcher has not been set.'); }
$this->dispatcher->listen(MessageLogged::class, $callback); }
/** * Fires a log event. * * @param string $level * @param string $message * @param array $context * @return void */ protected function fireLogEvent($level, $message, array $context = []) { // If the event dispatcher is set, we will pass along the parameters to the // log listeners. These are useful for building profilers or other tools // that aggregate all of the log messages for a given "request" cycle. if (isset($this->dispatcher)) { $this->dispatcher->dispatch(new MessageLogged($level, $message, $context)); } }
/** * Format the parameters for the logger. * * @param mixed $message * @return mixed */ protected function formatMessage($message) { if (is_array($message)) { return var_export($message, true); } elseif ($message instanceof Jsonable) { return $message->toJson(); } elseif ($message instanceof Arrayable) { return var_export($message->toArray(), true); }
return $message; }
/** * Get the underlying logger implementation. * * @return \Psr\Log\LoggerInterface */ public function getLogger() { return $this->logger; }
/** * Get the event dispatcher instance. * * @return \Illuminate\Contracts\Events\Dispatcher */ public function getEventDispatcher() { return $this->dispatcher; }
/** * Set the event dispatcher instance. * * @param \Illuminate\Contracts\Events\Dispatcher $dispatcher * @return void */ public function setEventDispatcher(Dispatcher $dispatcher) { $this->dispatcher = $dispatcher; }
/** * Dynamically proxy method calls to the underlying logger. * * @param string $method * @param array $parameters * @return mixed */ public function __call($method, $parameters) { return $this->logger->{$method}(...$parameters); } }
|