diff --git a/composer.json b/composer.json index 63d5b0d00..c8fb559d7 100644 --- a/composer.json +++ b/composer.json @@ -45,7 +45,6 @@ "pocketmine/errorhandler": "^0.6.0", "pocketmine/locale-data": "~2.19.0", "pocketmine/log": "^0.4.0", - "pocketmine/log-pthreads": "dev-stable", "pocketmine/math": "^0.4.0", "pocketmine/nbt": "^0.3.2", "pocketmine/raklib": "^0.15.0", diff --git a/composer.lock b/composer.lock index 4b6e1622f..05d87b634 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "507c2a45350440a7717ed089190fe4f0", + "content-hash": "0dc836612512d87a694945ffb87a4096", "packages": [ { "name": "adhocore/json-comment", @@ -651,51 +651,6 @@ }, "time": "2021-06-18T19:08:09+00:00" }, - { - "name": "pocketmine/log-pthreads", - "version": "dev-stable", - "source": { - "type": "git", - "url": "https://github.com/pmmp/LogPthreads.git", - "reference": "bb3b5395042d12ec0d7ad5c855fd86eaf12869d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pmmp/LogPthreads/zipball/bb3b5395042d12ec0d7ad5c855fd86eaf12869d3", - "reference": "bb3b5395042d12ec0d7ad5c855fd86eaf12869d3", - "shasum": "" - }, - "require": { - "ext-pmmpthread": "^6.0", - "php": "^8.1", - "pocketmine/log": "^0.4.0" - }, - "conflict": { - "pocketmine/spl": "<0.4" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "1.10.3", - "phpstan/phpstan-strict-rules": "^1.0" - }, - "default-branch": true, - "type": "library", - "autoload": { - "classmap": [ - "./src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "description": "Logging components specialized for pthreads used by PocketMine-MP and related projects", - "support": { - "issues": "https://github.com/pmmp/LogPthreads/issues", - "source": "https://github.com/pmmp/LogPthreads/tree/stable" - }, - "time": "2023-05-19T23:38:36+00:00" - }, { "name": "pocketmine/math", "version": "0.4.3", @@ -3298,7 +3253,6 @@ "minimum-stability": "stable", "stability-flags": { "pocketmine/classloader": 20, - "pocketmine/log-pthreads": 20, "pocketmine/snooze": 20 }, "prefer-stable": false, diff --git a/src/Server.php b/src/Server.php index 1262bc00e..df419c918 100644 --- a/src/Server.php +++ b/src/Server.php @@ -92,6 +92,7 @@ use pocketmine\resourcepacks\ResourcePackManager; use pocketmine\scheduler\AsyncPool; use pocketmine\snooze\SleeperHandler; use pocketmine\stats\SendUsageTask; +use pocketmine\thread\log\AttachableThreadSafeLogger; use pocketmine\timings\Timings; use pocketmine\timings\TimingsHandler; use pocketmine\updater\UpdateChecker; @@ -417,7 +418,7 @@ class Server{ return $this->autoloader; } - public function getLogger() : \AttachableThreadSafeLogger{ + public function getLogger() : AttachableThreadSafeLogger{ return $this->logger; } @@ -760,7 +761,7 @@ class Server{ public function __construct( private \DynamicClassLoader $autoloader, - private \AttachableThreadSafeLogger $logger, + private AttachableThreadSafeLogger $logger, string $dataPath, string $pluginPath ){ diff --git a/src/network/mcpe/raklib/RakLibServer.php b/src/network/mcpe/raklib/RakLibServer.php index 3a3cea673..5d4492f5f 100644 --- a/src/network/mcpe/raklib/RakLibServer.php +++ b/src/network/mcpe/raklib/RakLibServer.php @@ -26,6 +26,7 @@ namespace pocketmine\network\mcpe\raklib; use pmmp\thread\Thread as NativeThread; use pmmp\thread\ThreadSafeArray; use pocketmine\snooze\SleeperNotifier; +use pocketmine\thread\log\ThreadSafeLogger; use pocketmine\thread\NonThreadSafeValue; use pocketmine\thread\Thread; use raklib\generic\SocketException; @@ -55,7 +56,7 @@ class RakLibServer extends Thread{ * @phpstan-param ThreadSafeArray $threadToMainBuffer */ public function __construct( - protected \ThreadSafeLogger $logger, + protected ThreadSafeLogger $logger, protected ThreadSafeArray $mainToThreadBuffer, protected ThreadSafeArray $threadToMainBuffer, InternetAddress $address, diff --git a/src/scheduler/AsyncPool.php b/src/scheduler/AsyncPool.php index e04e58fd1..72d8b29e5 100644 --- a/src/scheduler/AsyncPool.php +++ b/src/scheduler/AsyncPool.php @@ -27,6 +27,7 @@ use pmmp\thread\Thread as NativeThread; use pmmp\thread\ThreadSafeArray; use pocketmine\snooze\SleeperHandler; use pocketmine\snooze\SleeperNotifier; +use pocketmine\thread\log\ThreadSafeLogger; use pocketmine\utils\Utils; use function array_keys; use function array_map; @@ -70,7 +71,7 @@ class AsyncPool{ protected int $size, private int $workerMemoryLimit, private \ClassLoader $classLoader, - private \ThreadSafeLogger $logger, + private ThreadSafeLogger $logger, private SleeperHandler $eventLoop ){} diff --git a/src/scheduler/AsyncWorker.php b/src/scheduler/AsyncWorker.php index f012b61d3..89908ff31 100644 --- a/src/scheduler/AsyncWorker.php +++ b/src/scheduler/AsyncWorker.php @@ -25,6 +25,7 @@ namespace pocketmine\scheduler; use pmmp\thread\Thread as NativeThread; use pocketmine\snooze\SleeperNotifier; +use pocketmine\thread\log\ThreadSafeLogger; use pocketmine\thread\Worker; use function gc_enable; use function ini_set; @@ -34,7 +35,7 @@ class AsyncWorker extends Worker{ private static array $store = []; public function __construct( - private \ThreadSafeLogger $logger, + private ThreadSafeLogger $logger, private int $id, private int $memoryLimit, private SleeperNotifier $notifier @@ -58,7 +59,7 @@ class AsyncWorker extends Worker{ } } - public function getLogger() : \ThreadSafeLogger{ + public function getLogger() : ThreadSafeLogger{ return $this->logger; } diff --git a/src/thread/log/AttachableThreadSafeLogger.php b/src/thread/log/AttachableThreadSafeLogger.php new file mode 100644 index 000000000..16c06f7ff --- /dev/null +++ b/src/thread/log/AttachableThreadSafeLogger.php @@ -0,0 +1,64 @@ + + */ + protected ThreadSafeArray $attachments; + + public function __construct(){ + $this->attachments = new ThreadSafeArray(); + } + + public function addAttachment(ThreadSafeLoggerAttachment $attachment) : void{ + $this->attachments[] = $attachment; + } + + public function removeAttachment(ThreadSafeLoggerAttachment $attachment) : void{ + foreach($this->attachments as $i => $a){ + if($attachment === $a){ + unset($this->attachments[$i]); + } + } + } + + public function removeAttachments() : void{ + foreach($this->attachments as $i => $a){ + unset($this->attachments[$i]); + } + } + + /** + * @return ThreadSafeLoggerAttachment[] + */ + public function getAttachments() : array{ + return (array) $this->attachments; + } +} diff --git a/src/thread/log/ThreadSafeLogger.php b/src/thread/log/ThreadSafeLogger.php new file mode 100644 index 000000000..a937f8f58 --- /dev/null +++ b/src/thread/log/ThreadSafeLogger.php @@ -0,0 +1,30 @@ +logWriterThread->write($time->format("Y-m-d") . " " . TextFormat::clean($message) . PHP_EOL); /** - * @var \ThreadSafeLoggerAttachment $attachment + * @var ThreadSafeLoggerAttachment $attachment */ foreach($this->attachments as $attachment){ $attachment->log($level, $message);