blob: f3840c283d0df6c15fb6b48d477e015060d4ed5a [file] [log] [blame]
<?php
namespace LdapRecord\Events;
use LdapRecord\Auth\Events\Event as AuthEvent;
use LdapRecord\Auth\Events\Failed;
use LdapRecord\Models\Events\Event as ModelEvent;
use LdapRecord\Query\Events\QueryExecuted as QueryEvent;
use Psr\Log\LoggerInterface;
use ReflectionClass;
class Logger
{
/**
* The logger instance.
*
* @var LoggerInterface|null
*/
protected $logger;
/**
* Constructor.
*
* @param LoggerInterface|null $logger
*/
public function __construct(LoggerInterface $logger = null)
{
$this->logger = $logger;
}
/**
* Logs the given event.
*
* @param mixed $event
*
* @return void
*/
public function log($event)
{
switch (true) {
case $event instanceof AuthEvent:
return $this->auth($event);
case $event instanceof ModelEvent:
return $this->model($event);
case $event instanceof QueryEvent:
return $this->query($event);
}
}
/**
* Logs an authentication event.
*
* @param AuthEvent $event
*
* @return void
*/
public function auth(AuthEvent $event)
{
if (isset($this->logger)) {
$connection = $event->getConnection();
$message = "LDAP ({$connection->getHost()})"
." - Operation: {$this->getOperationName($event)}"
." - Username: {$event->getUsername()}";
$result = null;
$type = 'info';
if (is_a($event, Failed::class)) {
$type = 'warning';
$result = " - Reason: {$connection->getLastError()}";
}
$this->logger->$type($message.$result);
}
}
/**
* Logs a model event.
*
* @param ModelEvent $event
*
* @return void
*/
public function model(ModelEvent $event)
{
if (isset($this->logger)) {
$model = $event->getModel();
$on = get_class($model);
$connection = $model->getConnection()->getLdapConnection();
$message = "LDAP ({$connection->getHost()})"
." - Operation: {$this->getOperationName($event)}"
." - On: {$on}"
." - Distinguished Name: {$model->getDn()}";
$this->logger->info($message);
}
}
/**
* Logs a query event.
*
* @param QueryEvent $event
*
* @return void
*/
public function query(QueryEvent $event)
{
if (isset($this->logger)) {
$query = $event->getQuery();
$connection = $query->getConnection()->getLdapConnection();
$selected = implode(',', $query->getSelects());
$message = "LDAP ({$connection->getHost()})"
." - Operation: {$this->getOperationName($event)}"
." - Base DN: {$query->getBaseDn()}"
." - Filter: {$query->getQuery()}"
." - Selected: ({$selected})"
." - Time Elapsed: {$event->getTime()}";
$this->logger->info($message);
}
}
/**
* Returns the operational name of the given event.
*
* @param mixed $event
*
* @return string
*/
protected function getOperationName($event)
{
return (new ReflectionClass($event))->getShortName();
}
}