From 37b105eff90d7566852620f521faa9c9b5b012aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=B4me=20Chilliet?= Date: Thu, 4 Dec 2025 12:03:31 +0100 Subject: [PATCH] feat(log): Add script name and occ command to log details MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will help when troubleshooting issues. For web request we have method and url, but for cron and occ currently we have no way to know if it’s one or the other and which command. Signed-off-by: Côme Chilliet --- build/psalm-baseline.xml | 5 ----- lib/private/AppFramework/Http/Request.php | 2 +- lib/private/Log/LogDetails.php | 22 +++++++++++++++++----- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml index 78390a1b68e66..4c93ce9006c54 100644 --- a/build/psalm-baseline.xml +++ b/build/psalm-baseline.xml @@ -2197,11 +2197,6 @@ - - - getMethod())]]> - - server['SCRIPT_NAME']; + $name = $this->server['SCRIPT_NAME'] ?? ''; $overwriteWebRoot = $this->config->getSystemValueString('overwritewebroot'); if ($overwriteWebRoot !== '' && $this->isOverwriteCondition()) { // FIXME: This code is untestable due to __DIR__, also that hardcoded path is really dangerous diff --git a/lib/private/Log/LogDetails.php b/lib/private/Log/LogDetails.php index 8c1efaea20dc4..21abb6d85cb46 100644 --- a/lib/private/Log/LogDetails.php +++ b/lib/private/Log/LogDetails.php @@ -1,11 +1,17 @@ config->getValue('logdateformat', \DateTimeInterface::ATOM); $logTimeZone = $this->config->getValue('logtimezone', 'UTC'); @@ -29,13 +35,13 @@ public function logDetails(string $app, $message, int $level): array { // apply timezone if $time is created from UNIX timestamp $time->setTimezone($timezone); } - $request = \OC::$server->getRequest(); + $request = Server::get(IRequest::class); $reqId = $request->getId(); $remoteAddr = $request->getRemoteAddress(); // remove username/passwords from URLs before writing the to the log file $time = $time->format($format); $url = ($request->getRequestUri() !== '') ? $request->getRequestUri() : '--'; - $method = is_string($request->getMethod()) ? $request->getMethod() : '--'; + $method = $request->getMethod(); if ($this->config->getValue('installed', false)) { $user = \OC_User::getUser() ?: '--'; } else { @@ -46,6 +52,7 @@ public function logDetails(string $app, $message, int $level): array { $userAgent = '--'; } $version = $this->config->getValue('version', ''); + $scriptName = $request->getScriptName(); $entry = compact( 'reqId', 'level', @@ -55,14 +62,19 @@ public function logDetails(string $app, $message, int $level): array { 'app', 'method', 'url', + 'scriptName', 'message', 'userAgent', - 'version' + 'version', ); $clientReqId = $request->getHeader('X-Request-Id'); if ($clientReqId !== '') { $entry['clientReqId'] = $clientReqId; } + if (\OC::$CLI) { + /* Only logging the command, not the parameters */ + $entry['occ_command'] = array_slice($_SERVER['argv'] ?? [], 0, 2); + } if (is_array($message)) { // Exception messages are extracted and the exception is put into a separate field @@ -81,7 +93,7 @@ public function logDetails(string $app, $message, int $level): array { return $entry; } - public function logDetailsAsJSON(string $app, $message, int $level): string { + public function logDetailsAsJSON(string $app, string|array $message, int $level): string { $entry = $this->logDetails($app, $message, $level); // PHP's json_encode only accept proper UTF-8 strings, loop over all // elements to ensure that they are properly UTF-8 compliant or convert