You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<?php
namespace App\Utilities\Logger;
use DateTimeZone; use InvalidArgumentException; use Monolog\Logger as Monolog; use Monolog\Handler\HandlerInterface; use App\HiLib\Logger\LogServiceRecordProcessor;
class CreateCustomLogger { protected $levels = [ 'debug' => Monolog::DEBUG, 'info' => Monolog::INFO, 'notice' => Monolog::NOTICE, 'warning' => Monolog::WARNING, 'error' => Monolog::ERROR, 'critical' => Monolog::CRITICAL, 'alert' => Monolog::ALERT, 'emergency' => Monolog::EMERGENCY, ];
public function __invoke(array $config) { if (!is_a($config['handler'], HandlerInterface::class, true)) { throw new InvalidArgumentException( $config['handler'] . ' must be an instance of ' . HandlerInterface::class ); }
$with = array_merge( ['level' => $this->level($config)], $config['with'] ?? [], $config['handler_with'] ?? [] );
$handlers = [ $this->prepareHandler(app()->make($config['handler'], $with), $config) ];
$processors = [ new LogServiceRecordProcessor, ];
return new Monolog('custom', $handlers, $processors, new DateTimeZone('Asia/Tehran')); }
protected function getFallbackChannelName() { return app()->bound('env') ? app()->environment() : 'production'; }
protected function prepareHandler(HandlerInterface $handler, array $config = []) { $isHandlerFormattable = false;
if (Monolog::API === 1) { $isHandlerFormattable = true; } elseif (Monolog::API === 2 && $handler instanceof FormattableHandlerInterface) { $isHandlerFormattable = true; }
if ($isHandlerFormattable && !isset($config['formatter'])) { $handler->setFormatter($this->formatter()); } elseif ($isHandlerFormattable && $config['formatter'] !== 'default') { $handler->setFormatter(app()->make($config['formatter'], $config['formatter_with'] ?? [])); }
return $handler; }
protected function level(array $config) { $level = $config['level'] ?? 'debug';
if (isset($this->levels[$level])) { return $this->levels[$level]; }
throw new InvalidArgumentException('Invalid log level.'); } }
|