From b4925f3065b65ca666d29fec2cd41be8bdf672a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Mon, 14 Oct 2024 15:01:39 +0200 Subject: [PATCH] feat: extend log entries with current uri --- config/services.yaml | 7 ++- src/Logging/RequestInfoProcessor.php | 24 ++++++++++ src/Logging/UserDataProcessor.php | 67 ++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 src/Logging/RequestInfoProcessor.php create mode 100644 src/Logging/UserDataProcessor.php diff --git a/config/services.yaml b/config/services.yaml index f7c263f..2d634fe 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -61,7 +61,12 @@ services: - '@security.helper' tags: - name: monolog.processor - channel: myep + + App\Logging\RequestInfoProcessor: + arguments: + - '@request_stack' + tags: + - name: monolog.processor App\Menu\AdminMenuBuilder: arguments: diff --git a/src/Logging/RequestInfoProcessor.php b/src/Logging/RequestInfoProcessor.php new file mode 100644 index 0000000..6c33ace --- /dev/null +++ b/src/Logging/RequestInfoProcessor.php @@ -0,0 +1,24 @@ +requestStack->getMainRequest()) { + return $record; + } + + $record['extra']['uri'] = $request->getRequestUri(); + + return $record; + } +} diff --git a/src/Logging/UserDataProcessor.php b/src/Logging/UserDataProcessor.php new file mode 100644 index 0000000..55277ee --- /dev/null +++ b/src/Logging/UserDataProcessor.php @@ -0,0 +1,67 @@ +extra['user'])) { + return $record; + } + + if ('cli' === php_sapi_name()) { + $record->extra['user'] = [ + 'id' => null, + 'username' => 'SYSTEM', + 'role' => 'system', + ]; + + return $record; + } + + /** @var User $user */ + $user = $this->security->getUser(); + + if (null === $user) { + $record->extra['user'] = [ + 'id' => null, + 'username' => 'ANONYMOUS', + 'role' => 'public', + ]; + + return $record; + } + + // Check for switched or aliased users + $originalUser = null; + $token = $this->security->getToken(); + if ($token instanceof SwitchUserToken) { + // User is currently switched to + $originalUser = $token->getOriginalToken()->getUser(); + } + if (null !== $originalUser) { + $username = sprintf('%s (via %s)', $user->getUserIdentifier(), $originalUser->getUserIdentifier()); + } else { + $username = $user->getUserIdentifier(); + } + $record->extra['user'] = [ + 'id' => $user->getId(), + 'username' => $username, + 'roles' => $user->getRoles(), + ]; + + return $record; + } +}