mirror of
https://github.com/nextcloud/server.git
synced 2026-02-27 12:00:39 -05:00
Merge pull request #56843 from nextcloud/feat/add-cli-details-to-log
feat(log): Add script name and occ command to log details
This commit is contained in:
commit
aeed32cfba
3 changed files with 17 additions and 11 deletions
|
|
@ -3951,11 +3951,6 @@
|
|||
<code><![CDATA[$limit === null]]></code>
|
||||
</TypeDoesNotContainNull>
|
||||
</file>
|
||||
<file src="lib/private/Log/LogDetails.php">
|
||||
<RedundantCondition>
|
||||
<code><![CDATA[is_string($request->getMethod())]]></code>
|
||||
</RedundantCondition>
|
||||
</file>
|
||||
<file src="lib/private/Log/Systemdlog.php">
|
||||
<UndefinedFunction>
|
||||
<code><![CDATA[sd_journal_send('PRIORITY=' . $journal_level,
|
||||
|
|
|
|||
|
|
@ -769,7 +769,7 @@ class Request implements \ArrayAccess, \Countable, IRequest {
|
|||
* @return string the script name
|
||||
*/
|
||||
public function getScriptName(): string {
|
||||
$name = $this->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
|
||||
|
|
|
|||
|
|
@ -1,12 +1,17 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OC\Log;
|
||||
|
||||
use OC\SystemConfig;
|
||||
use OCP\IRequest;
|
||||
use OCP\Server;
|
||||
|
||||
abstract class LogDetails {
|
||||
public function __construct(
|
||||
|
|
@ -14,7 +19,7 @@ abstract class LogDetails {
|
|||
) {
|
||||
}
|
||||
|
||||
public function logDetails(string $app, $message, int $level): array {
|
||||
public function logDetails(string $app, string|array $message, int $level): array {
|
||||
// default to ISO8601
|
||||
$format = $this->config->getValue('logdateformat', \DateTimeInterface::ATOM);
|
||||
$logTimeZone = $this->config->getValue('logtimezone', 'UTC');
|
||||
|
|
@ -30,13 +35,13 @@ abstract class LogDetails {
|
|||
// 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 {
|
||||
|
|
@ -47,6 +52,7 @@ abstract class LogDetails {
|
|||
$userAgent = '--';
|
||||
}
|
||||
$version = $this->config->getValue('version', '');
|
||||
$scriptName = $request->getScriptName();
|
||||
$entry = compact(
|
||||
'reqId',
|
||||
'level',
|
||||
|
|
@ -56,14 +62,19 @@ abstract class LogDetails {
|
|||
'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
|
||||
|
|
@ -82,7 +93,7 @@ abstract class LogDetails {
|
|||
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
|
||||
|
|
|
|||
Loading…
Reference in a new issue