This commit is contained in:
2021-11-04 16:36:24 +08:00
parent 67688043d2
commit b8ad6be979
+150 -149
View File
@@ -7,7 +7,6 @@ use Exception;
use Kiri\Events\EventProvider; use Kiri\Events\EventProvider;
use Kiri\Exception\ConfigException; use Kiri\Exception\ConfigException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Server\Events\OnAfterRequest;
use Server\Events\OnWorkerStop; use Server\Events\OnWorkerStop;
@@ -17,184 +16,186 @@ use Server\Events\OnWorkerStop;
class Logger implements LoggerInterface class Logger implements LoggerInterface
{ {
const EMERGENCY = 'emergency'; const EMERGENCY = 'emergency';
const ALERT = 'alert'; const ALERT = 'alert';
const CRITICAL = 'critical'; const CRITICAL = 'critical';
const ERROR = 'error'; const ERROR = 'error';
const WARNING = 'warning'; const WARNING = 'warning';
const NOTICE = 'notice'; const NOTICE = 'notice';
const INFO = 'info'; const INFO = 'info';
const DEBUG = 'debug'; const DEBUG = 'debug';
/** /**
* @var EventProvider * @var EventProvider
*/ */
#[Inject(EventProvider::class)] #[Inject(EventProvider::class)]
public EventProvider $eventProvider; public EventProvider $eventProvider;
private array $_loggers = []; private array $_loggers = [];
const LOGGER_LEVELS = [Logger::EMERGENCY, Logger::ALERT, Logger::CRITICAL, Logger::ERROR, Logger::WARNING, Logger::NOTICE, Logger::INFO, Logger::DEBUG]; const LOGGER_LEVELS = [Logger::EMERGENCY, Logger::ALERT, Logger::CRITICAL, Logger::ERROR, Logger::WARNING, Logger::NOTICE, Logger::INFO, Logger::DEBUG];
/** /**
* 监听事件 * 监听事件
*/ */
public function init() public function init()
{ {
$this->eventProvider->on(OnAfterRequest::class, [$this, 'onAfterRequest']); $this->eventProvider->on(OnWorkerStop::class, [$this, 'onAfterRequest']);
$this->eventProvider->on(OnWorkerStop::class, [$this, 'onAfterRequest']); }
}
/** /**
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
* *
* 紧急情况 * 紧急情况
*/ */
public function emergency($message, array $context = array()) public function emergency($message, array $context = [])
{ {
// TODO: Implement emergency() method. // TODO: Implement emergency() method.
$this->log(Logger::EMERGENCY, $message, $context); $this->log(Logger::EMERGENCY, $message, $context);
} }
/** /**
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
* *
* 应该警惕的 * 应该警惕的
*/ */
public function alert($message, array $context = array()) public function alert($message, array $context = [])
{ {
// TODO: Implement alert() method. // TODO: Implement alert() method.
$this->log(Logger::ALERT, $message, $context); $this->log(Logger::ALERT, $message, $context);
} }
/** /**
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
* *
* 关键性的日志 * 关键性的日志
*/ */
public function critical($message, array $context = array()) public function critical($message, array $context = [])
{ {
// TODO: Implement critical() method. // TODO: Implement critical() method.
$this->log(Logger::CRITICAL, $message, $context); $this->log(Logger::CRITICAL, $message, $context);
} }
/** /**
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
*/ */
public function error($message, array $context = array()) public function error($message, array $context = [])
{ {
// TODO: Implement error() method. // TODO: Implement error() method.
$this->log(Logger::ERROR, $message, $context); $this->log(Logger::ERROR, $message, $context);
} }
/** /**
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
*/ */
public function warning($message, array $context = array()) public function warning($message, array $context = [])
{ {
// TODO: Implement warning() method. // TODO: Implement warning() method.
$this->log(Logger::WARNING, $message, $context); $this->log(Logger::WARNING, $message, $context);
} }
/** /**
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
*/ */
public function notice($message, array $context = array()) public function notice($message, array $context = [])
{ {
// TODO: Implement notice() method. // TODO: Implement notice() method.
$this->log(Logger::NOTICE, $message, $context); $this->log(Logger::NOTICE, $message, $context);
} }
/** /**
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
*/ */
public function info($message, array $context = array()) public function info($message, array $context = [])
{ {
// TODO: Implement info() method. // TODO: Implement info() method.
$this->log(Logger::INFO, $message, $context); $this->log(Logger::INFO, $message, $context);
} }
/** /**
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
*/ */
public function debug($message, array $context = array()) public function debug($message, array $context = [])
{ {
// TODO: Implement debug() method. // TODO: Implement debug() method.
$this->log(Logger::DEBUG, $message, $context); $this->log(Logger::DEBUG, $message, $context);
} }
/** /**
* @param mixed $level * @param mixed $level
* @param string $message * @param string $message
* @param array $context * @param array $context
* @throws ConfigException * @throws ConfigException
*/ */
public function log($level, $message, array $context = array()) public function log($level, $message, array $context = [])
{ {
// TODO: Implement log() method. // TODO: Implement log() method.
$levels = Config::get('log.level', Logger::LOGGER_LEVELS); $levels = Config::get('log.level', Logger::LOGGER_LEVELS);
if (!in_array($level, $levels)) { if (!in_array($level, $levels)) {
return; return;
} }
$_string = '[' . now() . '] production.' . $level . ': ' . $this->_string($message, $context); $_string = '[' . now() . '] production.' . $level . ': ' . $this->_string($message, $context);
file_put_contents('php://output', $_string); file_put_contents('php://output', $_string);
$this->_loggers[] = $_string; $this->_loggers[] = $_string;
} }
/** /**
* @param OnAfterRequest|OnWorkerStop $param * @param OnWorkerStop $param
* @throws Exception * @throws Exception
*/ */
public function onAfterRequest(OnAfterRequest|OnWorkerStop $param) public function onAfterRequest(OnWorkerStop $param)
{ {
$loggers = implode(PHP_EOL, $this->_loggers); $loggers = implode(PHP_EOL, $this->_loggers);
$this->_loggers = []; $this->_loggers = [];
if (!empty($loggers)) { if (!empty($loggers)) {
$filename = storage('log-' . date('Y-m-d') . '.log', 'logs/'); $filename = storage('log-' . date('Y-m-d') . '.log', 'logs/');
file_put_contents($filename, $loggers); file_put_contents($filename, $loggers);
} }
} }
/** /**
* @param $message * @param $message
* @param $context * @param $context
* @return string * @return string
*/ */
private function _string($message, $context): string private function _string($message, $context): string
{ {
return $message . ' ' . print_r($context, true) . PHP_EOL; if (!empty($context)) {
} return $message . ' ' . print_r($context, true) . PHP_EOL;
}
return $message . PHP_EOL;
}
} }