diff options
author | Côme Chilliet <91878298+come-nc@users.noreply.github.com> | 2024-07-08 17:15:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-08 17:15:02 +0200 |
commit | a434dfbcb345723b774f8f13dd8369ab76e54967 (patch) | |
tree | 28a2af3b6488a5f4e6683dc2bbfd683484c1cbc2 /core | |
parent | fe90956aa45df0638169081e0854d2ec035f1c95 (diff) | |
parent | 5b9966feba3eea42cc961564ba32ff8d7ba28aa8 (diff) | |
download | nextcloud-server-a434dfbcb345723b774f8f13dd8369ab76e54967.tar.gz nextcloud-server-a434dfbcb345723b774f8f13dd8369ab76e54967.zip |
Merge pull request #46115 from nextcloud/enh/add-a-universal-debug-option-to-occ
feat(occ): Add a --debug option to output all log levels to the output
Diffstat (limited to 'core')
-rw-r--r-- | core/Listener/BeforeMessageLoggedEventListener.php | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/core/Listener/BeforeMessageLoggedEventListener.php b/core/Listener/BeforeMessageLoggedEventListener.php new file mode 100644 index 00000000000..ef771ca0a81 --- /dev/null +++ b/core/Listener/BeforeMessageLoggedEventListener.php @@ -0,0 +1,69 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace OC\Core\Listener; + +use OCP\Console\ReservedOptions; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\EventDispatcher\IEventListener; +use OCP\Log\BeforeMessageLoggedEvent; +use OCP\Server; + +/** + * Listen to log calls and output them to STDOUT for debug purposes + * @template-implements IEventListener<BeforeMessageLoggedEvent> + */ +class BeforeMessageLoggedEventListener implements IEventListener { + public function __construct( + private int $level, + ) { + } + + public function handle(Event $event): void { + if (!$event instanceof BeforeMessageLoggedEvent) { + return; + } + if ($event->getLevel() < $this->level) { + return; + } + echo + match($event->getLevel()) { + 0 => '[debug]', + 1 => '[info]', + 2 => '[warning]', + 3 => '[error]', + 4 => '[fatal]', + default => '['.$event->getLevel().']', + } + .' ['.$event->getApp().'] ' + .$event->getMessage()['message'] + ."\n"; + } + + /** + * Register listener to log messages and remove debug options from $_SERVER['argv'] + */ + public static function setup(): void { + $eventDispatcher = Server::get(IEventDispatcher::class); + $argv = $_SERVER['argv']; + $level = 0; + foreach ($argv as $key => $arg) { + if ($arg === '--'.ReservedOptions::DEBUG_LOG) { + unset($argv[$key]); + } elseif (str_starts_with($arg, '--'.ReservedOptions::DEBUG_LOG_LEVEL.'=')) { + $level = (int)substr($arg, strlen('--'.ReservedOptions::DEBUG_LOG_LEVEL.'=')); + unset($argv[$key]); + } + } + $_SERVER['argv'] = array_values($argv); + $debugLoggerEventListener = new self($level); + $eventDispatcher->addListener(BeforeMessageLoggedEvent::class, $debugLoggerEventListener->handle(...)); + } +} |