130 lines
4.6 KiB
PHP
130 lines
4.6 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace VK\Loggers;
|
||
|
||
use Monolog\Logger;
|
||
use Monolog\Handler\StreamHandler;
|
||
use Jasny\ErrorHandler;
|
||
use DateTime;
|
||
use VK\Traits\Singleton;
|
||
|
||
/**
|
||
* Журналист Jasmo
|
||
*
|
||
* Основан на "monolog/monolog" и "jasny/error-handler"
|
||
* Monolog + Jasny = Jasmo
|
||
*
|
||
* @package Log
|
||
* @author Arsen Mirzaev
|
||
*/
|
||
class Jasmo extends LoggerAbstract
|
||
{
|
||
use Singleton;
|
||
|
||
/**
|
||
* Экземпляр класса журналиста
|
||
*
|
||
* @var Logger
|
||
*/
|
||
public static $logger;
|
||
|
||
// /**
|
||
// * Экземпляр класса обработчика ошибок
|
||
// *
|
||
// * @var ErrorHandler
|
||
// */
|
||
// public ErrorHandler $handler;
|
||
|
||
public static function post($file = null): ?Jasmo
|
||
{
|
||
$file = $file ?? date_format(new DateTime($_ENV['TIMEZONE']), 'd_m_Y');
|
||
|
||
/**
|
||
* Создание логгера по спецификации PSR-3 (Monolog)
|
||
*
|
||
* @param string Название канала логирования
|
||
*/
|
||
self::$logger = new Logger(__CLASS__);
|
||
|
||
/**
|
||
* Создание обработчиков (порядок обязателен)
|
||
*/
|
||
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_ROOT'] . $_ENV['PATH_LOGS'] . "INFO_$file.log", Logger::INFO, false)); // Инфомация о процессе работы
|
||
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_ROOT'] . $_ENV['PATH_LOGS'] . "NOTICE_$file.log", Logger::NOTICE, false)); // Уведомления
|
||
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_ROOT'] . $_ENV['PATH_LOGS'] . "WARNING_$file.log", Logger::WARNING, false)); // Предупреждения
|
||
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_ROOT'] . $_ENV['PATH_LOGS'] . "ERROR_$file.log", Logger::ERROR, false)); // Ошибки
|
||
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_ROOT'] . $_ENV['PATH_LOGS'] . "CRITICAL_$file.log", Logger::CRITICAL, false)); // Критические ошибки
|
||
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_ROOT'] . $_ENV['PATH_LOGS'] . "ALERT_$file.log", Logger::ALERT, false)); // Критические ошибки
|
||
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_ROOT'] . $_ENV['PATH_LOGS'] . "EMERGENCY_$file.log", Logger::EMERGENCY, false)); // Критические ошибки
|
||
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_ROOT'] . $_ENV['PATH_LOGS'] . "$file.log", Logger::DEBUG)); // Общий лог
|
||
|
||
// test
|
||
// self::$logger->pushProcessor(function ($record) {
|
||
// $record['extra']['dummy'] = 'Hello world!';
|
||
|
||
// return $record;
|
||
// });
|
||
|
||
echo '[' . date_format(new DateTime($_ENV['TIMEZONE']), 'd-m-Y H:i:s') . '] Начало работы', PHP_EOL;
|
||
self::$logger->info('Начало работы');
|
||
|
||
return self::$instance;
|
||
}
|
||
|
||
public static function get(): ?Jasmo
|
||
{
|
||
return self::$instance;
|
||
}
|
||
|
||
public static function delete(): ?Jasmo
|
||
{
|
||
return self::$instance;
|
||
}
|
||
|
||
public static function postErrorHandler(): ?Jasmo
|
||
{
|
||
/**
|
||
* Подключение логгера в обработчик ошибок (Jasny)
|
||
*/
|
||
$handler = new ErrorHandler(self::$logger);
|
||
|
||
$handler->logUncaught(E_ALL); // Обрабатывать все ошибки
|
||
$handler->onFatalError(function ($error) {
|
||
self::$logger->error($error);
|
||
}, true);
|
||
|
||
return self::$instance;
|
||
}
|
||
|
||
public static function deleteErrorHandler(): ?Jasmo
|
||
{
|
||
return self::$instance;
|
||
}
|
||
|
||
public static function postShutdownHandler(): ?Jasmo
|
||
{
|
||
register_shutdown_function(array(self::$instance, 'handlerShutdown'));
|
||
|
||
return self::$instance;
|
||
}
|
||
|
||
|
||
public function handlerShutdown(): void
|
||
{
|
||
self::$logger->info('Завершение работы');
|
||
echo '[' . date_format(new DateTime($_ENV['TIMEZONE']), 'd-m-Y H:i:s') . '] Завершение работы', PHP_EOL;
|
||
}
|
||
|
||
// public function handlerErrors($errno, $errstr, $errfile, $errline, $errcontext): bool
|
||
// {
|
||
// echo "друг, да ты вероянто напортачил $errno $errstr", PHP_EOL, PHP_EOL;
|
||
// if ($this->logger->error("друг, да ты вероянто напортачил $errno $errstr")) {
|
||
// return true;
|
||
// } else {
|
||
// return false;
|
||
// }
|
||
// }
|
||
}
|