From de81f16557c2af78876a71846a46e1d2fd312195 Mon Sep 17 00:00:00 2001 From: Aldarien Date: Thu, 1 Dec 2022 14:15:54 -0300 Subject: [PATCH] Logging --- api/common/Middleware/Logging.php | 38 +++++++++++++++++++ api/setup/middleware/98_log.php | 2 + api/setup/settings/02_folders.php | 3 +- api/setup/setups/04_middlewares.php | 5 ++- api/setup/setups/98_log.php | 14 ++++++- cli/common/Middleware/Logging.php | 38 +++++++++++++++++++ cli/public/index.php | 1 + cli/setup/middleware/98_log.php | 2 + cli/setup/settings/02_folders.php | 3 +- cli/setup/setups/03_middleware.php | 8 ++++ cli/setup/setups/98_log.php | 30 +++++++++++---- ui/common/Controller/Api.php | 7 ++-- ui/common/Middleware/Logging.php | 38 +++++++++++++++++++ ui/public/index.php | 1 + ui/resources/routes/98_api.php | 2 +- ui/resources/views/emails/show.blade.php | 6 +-- .../layout/body/footer/scripts/main.blade.php | 9 ++--- ui/setup/middleware/98_log.php | 2 + ui/setup/settings/02_folders.php | 3 +- ui/setup/setups/02_api.php | 4 +- ui/setup/setups/04_middleware.php | 8 ++++ ui/setup/setups/98_log.php | 22 ++++++++--- 22 files changed, 211 insertions(+), 35 deletions(-) create mode 100644 api/common/Middleware/Logging.php create mode 100644 api/setup/middleware/98_log.php create mode 100644 cli/common/Middleware/Logging.php create mode 100644 cli/setup/middleware/98_log.php create mode 100644 cli/setup/setups/03_middleware.php create mode 100644 ui/common/Middleware/Logging.php create mode 100644 ui/setup/middleware/98_log.php create mode 100644 ui/setup/setups/04_middleware.php diff --git a/api/common/Middleware/Logging.php b/api/common/Middleware/Logging.php new file mode 100644 index 0000000..a95c37b --- /dev/null +++ b/api/common/Middleware/Logging.php @@ -0,0 +1,38 @@ +setLogger($logger); + } + + protected LoggerInterface $logger; + + public function getLogger(): LoggerInterface + { + return $this->logger; + } + + public function setLogger(LoggerInterface $logger): Logging + { + $this->logger = $logger; + return $this; + } + + public function __invoke(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $response = $handler->handle($request); + $output = [ + 'uri' => var_export($request->getUri(), true), + 'body' => $request->getBody()->getContents() + ]; + $this->getLogger()->info(\Safe\json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + return $response; + } +} diff --git a/api/setup/middleware/98_log.php b/api/setup/middleware/98_log.php new file mode 100644 index 0000000..4df6f6c --- /dev/null +++ b/api/setup/middleware/98_log.php @@ -0,0 +1,2 @@ +add($app->getContainer()->get(ProVM\Common\Middleware\Logging::class)); diff --git a/api/setup/settings/02_folders.php b/api/setup/settings/02_folders.php index 669c193..1b381f4 100644 --- a/api/setup/settings/02_folders.php +++ b/api/setup/settings/02_folders.php @@ -18,4 +18,5 @@ return [ ]); }, 'attachments_folder' => $_ENV['ATTACHMENTS_FOLDER'], -]; \ No newline at end of file + 'logs_folder' => '/logs', +]; diff --git a/api/setup/setups/04_middlewares.php b/api/setup/setups/04_middlewares.php index b94e9ec..1ec3b45 100644 --- a/api/setup/setups/04_middlewares.php +++ b/api/setup/setups/04_middlewares.php @@ -7,5 +7,8 @@ return [ $container->get(Nyholm\Psr7\Factory\Psr17Factory::class), $container->get(Psr\Log\LoggerInterface::class) ); + }, + ProVM\Common\Middleware\Logging::class => function(ContainerInterface $container) { + return new ProVM\Common\Middleware\Logging($container->get('request_logger')); } -]; \ No newline at end of file +]; diff --git a/api/setup/setups/98_log.php b/api/setup/setups/98_log.php index 0aedf37..ec2c9a7 100644 --- a/api/setup/setups/98_log.php +++ b/api/setup/setups/98_log.php @@ -10,13 +10,23 @@ return [ $handler->setFormatter($container->get(Monolog\Formatter\SyslogFormatter::class)); return $handler; }, + 'request_logger' => function(ContainerInterface $container) { + $logger = new Monolog\Logger('request_logger'); + $handler = new Monolog\Handler\RotatingFileHandler(implode(DIRECTORY_SEPARATOR, [$container->get('logs_folder'), 'requests.log'])); + $handler->setFormatter($container->get(Monolog\Formatter\SyslogFormatter::class)); + $dedupHandler = new Monolog\Handler\DeduplicationHandler($handler, null, Monolog\Level::Info); + $logger->pushHandler($dedupHandler); + $logger->pushProcessor($container->get(Monolog\Processor\PsrLogMessageProcessor::class)); + $logger->pushProcessor($container->get(Monolog\Processor\IntrospectionProcessor::class)); + $logger->pushProcessor($container->get(Monolog\Processor\MemoryUsageProcessor::class)); + return $logger; + }, Psr\Log\LoggerInterface::class => function(ContainerInterface $container) { $logger = new Monolog\Logger('file_logger'); $logger->pushHandler($container->get(Monolog\Handler\DeduplicationHandler::class)); - //$logger->pushHandler($container->get(Monolog\Handler\RotatingFileHandler::class)); $logger->pushProcessor($container->get(Monolog\Processor\PsrLogMessageProcessor::class)); $logger->pushProcessor($container->get(Monolog\Processor\IntrospectionProcessor::class)); $logger->pushProcessor($container->get(Monolog\Processor\MemoryUsageProcessor::class)); return $logger; } -]; \ No newline at end of file +]; diff --git a/cli/common/Middleware/Logging.php b/cli/common/Middleware/Logging.php new file mode 100644 index 0000000..a95c37b --- /dev/null +++ b/cli/common/Middleware/Logging.php @@ -0,0 +1,38 @@ +setLogger($logger); + } + + protected LoggerInterface $logger; + + public function getLogger(): LoggerInterface + { + return $this->logger; + } + + public function setLogger(LoggerInterface $logger): Logging + { + $this->logger = $logger; + return $this; + } + + public function __invoke(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $response = $handler->handle($request); + $output = [ + 'uri' => var_export($request->getUri(), true), + 'body' => $request->getBody()->getContents() + ]; + $this->getLogger()->info(\Safe\json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + return $response; + } +} diff --git a/cli/public/index.php b/cli/public/index.php index daaaaed..aed6193 100644 --- a/cli/public/index.php +++ b/cli/public/index.php @@ -4,6 +4,7 @@ $app = require_once implode(DIRECTORY_SEPARATOR, [ 'setup', 'app.php' ]); +Monolog\ErrorHandler::register($app->getContainer()->get(Psr\Log\LoggerInterface::class)); try { $app->run(); } catch (Error | Exception $e) { diff --git a/cli/setup/middleware/98_log.php b/cli/setup/middleware/98_log.php new file mode 100644 index 0000000..4df6f6c --- /dev/null +++ b/cli/setup/middleware/98_log.php @@ -0,0 +1,2 @@ +add($app->getContainer()->get(ProVM\Common\Middleware\Logging::class)); diff --git a/cli/setup/settings/02_folders.php b/cli/setup/settings/02_folders.php index 0dd206a..fcafa9b 100644 --- a/cli/setup/settings/02_folders.php +++ b/cli/setup/settings/02_folders.php @@ -14,5 +14,6 @@ return [ $container->get('resources_folder'), 'commands' ]); - } + }, + 'logs_folder' => '/logs', ]; diff --git a/cli/setup/setups/03_middleware.php b/cli/setup/setups/03_middleware.php new file mode 100644 index 0000000..1d6cc44 --- /dev/null +++ b/cli/setup/setups/03_middleware.php @@ -0,0 +1,8 @@ + function(ContainerInterface $container) { + return new ProVM\Common\Middleware\Logging($container->get('request_logger')); + } +]; diff --git a/cli/setup/setups/98_log.php b/cli/setup/setups/98_log.php index eaef107..b33a5ce 100644 --- a/cli/setup/setups/98_log.php +++ b/cli/setup/setups/98_log.php @@ -2,14 +2,28 @@ use Psr\Container\ContainerInterface; return [ - \Monolog\Handler\RotatingFileHandler::class => function(ContainerInterface $container) { - $handler = new \Monolog\Handler\RotatingFileHandler($container->get('log_file')); - $handler->setFormatter($container->get(\Monolog\Formatter\LineFormatter::class)); + Monolog\Handler\RotatingFileHandler::class => function(ContainerInterface $container) { + $handler = new Monolog\Handler\RotatingFileHandler($container->get('log_file')); + $handler->setFormatter($container->get(Monolog\Formatter\LineFormatter::class)); return $handler; }, - \Psr\Log\LoggerInterface::class => function(ContainerInterface $container) { - $logger = new \Monolog\Logger('file_logger'); - $logger->pushHandler($container->get(\Monolog\Handler\RotatingFileHandler::class)); + 'request_logger' => function(ContainerInterface $container) { + $logger = new Monolog\Logger('request_logger'); + $handler = new Monolog\Handler\RotatingFileHandler(implode(DIRECTORY_SEPARATOR, [$container->get('logs_folder'), 'requests.log'])); + $handler->setFormatter($container->get(Monolog\Formatter\SyslogFormatter::class)); + $dedupHandler = new Monolog\Handler\DeduplicationHandler($handler, null, Monolog\Level::Info); + $logger->pushHandler($dedupHandler); + $logger->pushProcessor($container->get(Monolog\Processor\PsrLogMessageProcessor::class)); + $logger->pushProcessor($container->get(Monolog\Processor\IntrospectionProcessor::class)); + $logger->pushProcessor($container->get(Monolog\Processor\MemoryUsageProcessor::class)); return $logger; - } -]; \ No newline at end of file + }, + Psr\Log\LoggerInterface::class => function(ContainerInterface $container) { + $logger = new Monolog\Logger('file_logger'); + $logger->pushHandler($container->get(Monolog\Handler\RotatingFileHandler::class)); + $logger->pushProcessor($container->get(Monolog\Processor\PsrLogMessageProcessor::class)); + $logger->pushProcessor($container->get(Monolog\Processor\IntrospectionProcessor::class)); + $logger->pushProcessor($container->get(Monolog\Processor\MemoryUsageProcessor::class)); + return $logger; + }, +]; diff --git a/ui/common/Controller/Api.php b/ui/common/Controller/Api.php index 4202787..7efcdc8 100644 --- a/ui/common/Controller/Api.php +++ b/ui/common/Controller/Api.php @@ -4,14 +4,13 @@ namespace ProVM\Common\Controller; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use ProVM\Common\Service\Api as Service; +use Psr\Log\LoggerInterface; class Api { - public function __invoke(ServerRequestInterface $request, ResponseInterface $response, Service $service): ResponseInterface + public function __invoke(ServerRequestInterface $request, ResponseInterface $response, Service $service, LoggerInterface $logger): ResponseInterface { - $body = $request->getBody(); - $json = \Safe\json_decode($body->getContents(), JSON_OBJECT_AS_ARRAY); - + $json = $request->getParsedBody(); return $service->sendRequest($json); } } diff --git a/ui/common/Middleware/Logging.php b/ui/common/Middleware/Logging.php new file mode 100644 index 0000000..c60465d --- /dev/null +++ b/ui/common/Middleware/Logging.php @@ -0,0 +1,38 @@ +setLogger($logger); + } + + protected LoggerInterface $logger; + + public function getLogger(): LoggerInterface + { + return $this->logger; + } + + public function setLogger(LoggerInterface $logger): Logging + { + $this->logger = $logger; + return $this; + } + + public function __invoke(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $response = $handler->handle($request); + $output = [ + 'uri' => var_export($request->getUri(), true), + 'body' => $request->getParsedBody() + ]; + $this->getLogger()->info(\Safe\json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + return $response; + } +} diff --git a/ui/public/index.php b/ui/public/index.php index 9659116..71055da 100644 --- a/ui/public/index.php +++ b/ui/public/index.php @@ -8,6 +8,7 @@ Monolog\ErrorHandler::register($app->getContainer()->get(Psr\Log\LoggerInterface try { $app->run(); } catch (Error | Exception $e) { + $app->getContainer()->get(Psr\Log\LoggerInterface::class)->debug(json_encode(compact('_REQUEST'))); $app->getContainer()->get(Psr\Log\LoggerInterface::class)->error($e); throw $e; } diff --git a/ui/resources/routes/98_api.php b/ui/resources/routes/98_api.php index 4baf51f..26bf2d3 100644 --- a/ui/resources/routes/98_api.php +++ b/ui/resources/routes/98_api.php @@ -1,4 +1,4 @@ post('/api', Api::class); \ No newline at end of file +$app->post('/api[/]', Api::class); diff --git a/ui/resources/views/emails/show.blade.php b/ui/resources/views/emails/show.blade.php index 32bba7d..8a037d6 100644 --- a/ui/resources/views/emails/show.blade.php +++ b/ui/resources/views/emails/show.blade.php @@ -3,7 +3,7 @@ @section('emails_content')

Message - -

-
+ @endsection @push('page_scripts') @@ -82,7 +82,7 @@ attachments: parent => { this.get().attachments().forEach(attachment => { parent.append( - $('').attr('href', _urls.base + '/attachment/' + attachment.id).attr('download', attachment.fullname).html(attachment.fullname) + $('').attr('href', '{{$urls->base}}/attachment/' + attachment.id).attr('download', attachment.fullname).html(attachment.fullname) ) }) } @@ -100,4 +100,4 @@ message.setup('{{$message_id}}') }) -@endpush \ No newline at end of file +@endpush diff --git a/ui/resources/views/layout/body/footer/scripts/main.blade.php b/ui/resources/views/layout/body/footer/scripts/main.blade.php index 721f189..e9327cb 100644 --- a/ui/resources/views/layout/body/footer/scripts/main.blade.php +++ b/ui/resources/views/layout/body/footer/scripts/main.blade.php @@ -3,18 +3,17 @@ base_url: '{{$urls->api}}', base: function({method, uri, data = null}) { const request = { - uri: uri.replace(/^\//g, ''), + uri: uri, method } const options = { url: this.base_url, method: 'post', - contentType: 'application/json' } if (method.toLowerCase() !== 'get' && data !== null) { request['data'] = data } - options['data'] = JSON.stringify(request) + options['data'] = request return $.ajax(options) }, get: function(uri) { @@ -30,5 +29,5 @@ return this.base({method: 'delete', uri, data}) } } - const _urls = JSON.parse('{!! Safe\json_encode($urls) !!}') - \ No newline at end of file + //const _urls = JSON.parse('{!! Safe\json_encode($urls) !!}') + diff --git a/ui/setup/middleware/98_log.php b/ui/setup/middleware/98_log.php new file mode 100644 index 0000000..4df6f6c --- /dev/null +++ b/ui/setup/middleware/98_log.php @@ -0,0 +1,2 @@ +add($app->getContainer()->get(ProVM\Common\Middleware\Logging::class)); diff --git a/ui/setup/settings/02_folders.php b/ui/setup/settings/02_folders.php index f3a4efd..180321f 100644 --- a/ui/setup/settings/02_folders.php +++ b/ui/setup/settings/02_folders.php @@ -20,6 +20,7 @@ return [ $arr['base'], 'cache' ]); + $arr['logs'] = '/logs'; return (object) $arr; } -]; \ No newline at end of file +]; diff --git a/ui/setup/setups/02_api.php b/ui/setup/setups/02_api.php index 7f7be20..32def7b 100644 --- a/ui/setup/setups/02_api.php +++ b/ui/setup/setups/02_api.php @@ -4,7 +4,7 @@ use Psr\Container\ContainerInterface; return [ Psr\Http\Client\ClientInterface::class => function(ContainerInterface $container) { return new GuzzleHttp\Client([ - 'base_uri' => "http://proxy:8080", + 'base_uri' => $container->get('urls')->api, 'headers' => [ 'Authorization' => [ "Bearer {$container->get('api_key')}" @@ -15,4 +15,4 @@ return [ Psr\Http\Message\RequestFactoryInterface::class => function(ContainerInterface $container) { return $container->get(Nyholm\Psr7\Factory\Psr17Factory::class); }, -]; \ No newline at end of file +]; diff --git a/ui/setup/setups/04_middleware.php b/ui/setup/setups/04_middleware.php new file mode 100644 index 0000000..1d6cc44 --- /dev/null +++ b/ui/setup/setups/04_middleware.php @@ -0,0 +1,8 @@ + function(ContainerInterface $container) { + return new ProVM\Common\Middleware\Logging($container->get('request_logger')); + } +]; diff --git a/ui/setup/setups/98_log.php b/ui/setup/setups/98_log.php index 0aedf37..ef8b9d6 100644 --- a/ui/setup/setups/98_log.php +++ b/ui/setup/setups/98_log.php @@ -10,13 +10,23 @@ return [ $handler->setFormatter($container->get(Monolog\Formatter\SyslogFormatter::class)); return $handler; }, - Psr\Log\LoggerInterface::class => function(ContainerInterface $container) { - $logger = new Monolog\Logger('file_logger'); - $logger->pushHandler($container->get(Monolog\Handler\DeduplicationHandler::class)); - //$logger->pushHandler($container->get(Monolog\Handler\RotatingFileHandler::class)); + 'request_logger' => function(ContainerInterface $container) { + $logger = new Monolog\Logger('request_logger'); + $handler = new Monolog\Handler\RotatingFileHandler(implode(DIRECTORY_SEPARATOR, [$container->get('folders')->logs, 'requests.log'])); + $handler->setFormatter($container->get(Monolog\Formatter\SyslogFormatter::class)); + $dedupHandler = new Monolog\Handler\DeduplicationHandler($handler, null, Monolog\Level::Info); + $logger->pushHandler($dedupHandler); $logger->pushProcessor($container->get(Monolog\Processor\PsrLogMessageProcessor::class)); $logger->pushProcessor($container->get(Monolog\Processor\IntrospectionProcessor::class)); $logger->pushProcessor($container->get(Monolog\Processor\MemoryUsageProcessor::class)); return $logger; - } -]; \ No newline at end of file + }, + Psr\Log\LoggerInterface::class => function(ContainerInterface $container) { + $logger = new Monolog\Logger('file_logger'); + $logger->pushHandler($container->get(Monolog\Handler\DeduplicationHandler::class)); + $logger->pushProcessor($container->get(Monolog\Processor\PsrLogMessageProcessor::class)); + $logger->pushProcessor($container->get(Monolog\Processor\IntrospectionProcessor::class)); + $logger->pushProcessor($container->get(Monolog\Processor\MemoryUsageProcessor::class)); + return $logger; + }, +];