diff --git a/HttpServer/Abstracts/Callback.php b/HttpServer/Abstracts/Callback.php index 2ed44361..2eac1aa1 100644 --- a/HttpServer/Abstracts/Callback.php +++ b/HttpServer/Abstracts/Callback.php @@ -8,16 +8,14 @@ use Database\Connection; use Exception; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; -use ReflectionException; use Snowflake\Abstracts\Config; -use Snowflake\Error\Logger; +use Snowflake\Core\Json; use Snowflake\Event; use Snowflake\Exception\ComponentException; use Snowflake\Exception\ConfigException; -use Snowflake\Exception\NotFindClassException; use Snowflake\Snowflake; -use Swoole\Coroutine\Server; -use Swoole\Timer; +use Swoole\Process; +use Swoole\Server; /** @@ -34,14 +32,14 @@ abstract class Callback extends HttpService * @param $message * @throws Exception */ - protected function clear($server, $worker_id, $message) + protected function clear(Server $server, $worker_id, $message) { try { Snowflake::clearProcessId($server->worker_pid); - $logger = Snowflake::app()->getLogger(); - $logger->write($this->_MESSAGE[$message] . $worker_id); - $logger->clear(); + /** @var Process $logger */ + $logger = Snowflake::app()->get('logger_process'); + $logger->write(Json::encode([$this->_MESSAGE[$message] . $worker_id, 'app'])); $this->eventNotify($message); } catch (\Throwable $exception) { @@ -156,7 +154,6 @@ abstract class Callback extends HttpService } - /** * @throws ConfigException * @throws ComponentException diff --git a/HttpServer/Server.php b/HttpServer/Server.php index 7cd3095e..98048bc4 100644 --- a/HttpServer/Server.php +++ b/HttpServer/Server.php @@ -3,6 +3,7 @@ namespace HttpServer; +use HttpServer\Abstracts\Callback; use HttpServer\Abstracts\HttpService; use HttpServer\Events\OnClose; use HttpServer\Events\OnConnect; @@ -69,7 +70,8 @@ class Server extends HttpService private array $process = [ - 'biomonitoring' => Biomonitoring::class + 'biomonitoring' => Biomonitoring::class, + 'logger_process' => Callback::class ]; private array $params = []; @@ -99,13 +101,11 @@ class Server extends HttpService /** * @param array $configs * @return Packet|Websocket|Receive|Http|null - * @throws ConfigException * @throws Exception */ public function initCore(array $configs): Packet|Websocket|Receive|Http|null { $this->orders($configs); - $this->onProcessListener(); return $this->getServer(); } @@ -376,6 +376,8 @@ class Server extends HttpService } $this->baseServer->set($settings); + $this->onProcessListener(); + return $this->baseServer; } diff --git a/System/Error/Logger.php b/System/Error/Logger.php index c63f88aa..448c416e 100644 --- a/System/Error/Logger.php +++ b/System/Error/Logger.php @@ -160,19 +160,11 @@ class Logger extends Component if (empty($messages)) { return; } - $fileName = 'server-' . date('Y-m-d') . '.log'; - $dirName = 'log/' . (empty($method) ? 'app' : $method); $logFile = '[' . date('Y-m-d H:i:s') . ']:' . PHP_EOL . $messages . PHP_EOL; - Snowflake::writeFile(storage($fileName, $dirName), $logFile, FILE_APPEND); - $files = glob(storage(null, $dirName) . '/*'); - if (count($files) >= 15) { - $command = 'find ' . storage(null, $dirName) . '/ -mtime +15 -name "*.log" -exec rm -rf {} \;'; - if (Context::inCoroutine()) - Coroutine\System::exec($command); - else - \shell_exec($command); - } + /** @var Process $logger */ + $logger = Snowflake::app()->get('logger_process'); + $logger->write(Json::encode([$logFile, $method])); } /** diff --git a/System/Error/LoggerProcess.php b/System/Error/LoggerProcess.php new file mode 100644 index 00000000..911cbe0d --- /dev/null +++ b/System/Error/LoggerProcess.php @@ -0,0 +1,64 @@ +message($process); + } + + + /** + * @param \Swoole\Process $process + * @throws ComponentException + * @throws \Exception + */ + public function message(\Swoole\Process $process) + { + $message = Json::decode($process->read()); + if (!empty($message)) { + $fileName = 'server-' . date('Y-m-d') . '.log'; + $dirName = 'log/' . (empty($method) ? 'app' : $method); + + Snowflake::writeFile(storage($fileName, $dirName), $message[0], FILE_APPEND); + + $files = new \DirectoryIterator(storage(null, $dirName) . '/*.log'); + if ($files->getSize() >= 15) { + $command = 'find ' . storage(null, $dirName) . '/ -mtime +15 -name "*.log" -exec rm -rf {} \;'; + if (Context::inCoroutine()) + Coroutine\System::exec($command); + else + \shell_exec($command); + } + } + + Coroutine\System::sleep(1); + + $this->message($process); + } + +}