vk/system/Loggers/Jasmo.php

130 lines
4.5 KiB
PHP
Raw Normal View History

<?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');
/**
* Создание логгера по спецификации 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)); // Общий лог
// 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;
// }
// }
}