Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix(occ): Move debug log listener setup to a static method, add optio…
…n for level

Also changed option from --debug to --debug-log to avoid conflicts

Signed-off-by: Côme Chilliet <[email protected]>
  • Loading branch information
come-nc committed Jul 2, 2024
commit 9baf8fea8c6faf88ddf0fc969426b893f2fe2071
7 changes: 1 addition & 6 deletions console.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,8 @@ function exceptionHandler($exception) {
$eventLogger->start('console:build_application', 'Build Application instance and load commands');

$application = \OCP\Server::get(Application::class);
/* base.php will have removed eventual debug options from argv in $_SERVER */
$argv = $_SERVER['argv'];
if (($key = array_search('--debug', $argv)) !== false) {
// Remove --debug option if it was passed
unset($argv[$key]);
$argv = array_values($argv);
}

$input = new ArgvInput($argv);
$application->loadCommands($input, new ConsoleOutput());

Expand Down
30 changes: 30 additions & 0 deletions core/Listener/BeforeMessageLoggedEventListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,28 @@
namespace OC\Core\Listener;

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]',
Expand All @@ -35,4 +45,24 @@ public function handle(Event $event): void {
.$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 === '--debug-log') {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we put them into OCP somewhere so app devs have a list/track of "reserved arguments"?

unset($argv[$key]);
} elseif (str_starts_with($arg, '--debug-log-level=')) {
$level = (int)substr($arg, strlen('--debug-log-level='));
unset($argv[$key]);
}
}
$_SERVER['argv'] = array_values($argv);
$debugLoggerEventListener = new self($level);
$eventDispatcher->addListener(BeforeMessageLoggedEvent::class, $debugLoggerEventListener->handle(...));
}
}
11 changes: 2 additions & 9 deletions lib/base.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ class OC {
* check if Nextcloud runs in cli mode
*/
public static bool $CLI = false;
public static bool $CLI_DEBUG = false;

public static \OC\Autoloader $loader;

Expand Down Expand Up @@ -557,11 +556,6 @@ public static function init(): void {
self::$composerAutoloader = require_once OC::$SERVERROOT . '/lib/composer/autoload.php';
self::$composerAutoloader->setApcuPrefix(null);

if (self::$CLI && ($key = array_search('--debug', $_SERVER['argv'])) !== false) {
self::$CLI_DEBUG = true;
} else {
self::$CLI_DEBUG = false;
}

try {
self::initPaths();
Expand All @@ -585,9 +579,8 @@ public static function init(): void {
self::$server = new \OC\Server(\OC::$WEBROOT, self::$config);
self::$server->boot();

if (self::$CLI_DEBUG) {
$eventDispatcher = \OCP\Server::get(IEventDispatcher::class);
$eventDispatcher->addServiceListener(\OCP\Log\BeforeMessageLoggedEvent::class, \OC\Core\Listener\BeforeMessageLoggedEventListener::class);
if (self::$CLI && in_array('--debug-log', $_SERVER['argv'])) {
\OC\Core\Listener\BeforeMessageLoggedEventListener::setup();
}

$eventLogger = Server::get(\OCP\Diagnostics\IEventLogger::class);
Expand Down