2020-07-09 22:17:26 +07:00
|
|
|
|
<?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
|
|
|
|
|
{
|
2020-09-03 13:18:02 +07:00
|
|
|
|
$file = $file ?? date_format(new DateTime($_ENV['TIMEZONE']), 'Y.m.d');
|
2020-07-09 22:17:26 +07:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Создание логгера по спецификации PSR-3 (Monolog)
|
|
|
|
|
*
|
|
|
|
|
* @param string Название канала логирования
|
|
|
|
|
*/
|
|
|
|
|
self::$logger = new Logger(__CLASS__);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Создание обработчиков (порядок обязателен)
|
|
|
|
|
*/
|
2020-09-03 13:18:02 +07:00
|
|
|
|
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_LOGS'] . "/${file}-INFO.log", Logger::INFO, false)); // Инфомация о процессе работы
|
|
|
|
|
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_LOGS'] . "/${file}-NOTICE.log", Logger::NOTICE, false)); // Уведомления
|
|
|
|
|
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_LOGS'] . "/${file}-WARNING.log", Logger::WARNING, false)); // Предупреждения
|
|
|
|
|
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_LOGS'] . "/${file}-ERROR.log", Logger::ERROR, false)); // Ошибки
|
|
|
|
|
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_LOGS'] . "/${file}-CRITICAL.log", Logger::CRITICAL, false)); // Критические ошибки
|
|
|
|
|
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_LOGS'] . "/${file}-ALERT.log", Logger::ALERT, false)); // Критические ошибки
|
|
|
|
|
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_LOGS'] . "/${file}-EMERGENCY.log", Logger::EMERGENCY, false)); // Критические ошибки
|
|
|
|
|
self::$logger->pushHandler(new StreamHandler($_ENV['PATH_LOGS'] . "/$file.log", Logger::DEBUG)); // Общий лог
|
2020-07-09 22:17:26 +07:00
|
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
}
|