aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorCôme Chilliet <91878298+come-nc@users.noreply.github.com>2024-07-08 17:15:02 +0200
committerGitHub <noreply@github.com>2024-07-08 17:15:02 +0200
commita434dfbcb345723b774f8f13dd8369ab76e54967 (patch)
tree28a2af3b6488a5f4e6683dc2bbfd683484c1cbc2 /core
parentfe90956aa45df0638169081e0854d2ec035f1c95 (diff)
parent5b9966feba3eea42cc961564ba32ff8d7ba28aa8 (diff)
downloadnextcloud-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.php69
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(...));
+ }
+}