Filtro en server params
This commit is contained in:
@ -1,10 +1,10 @@
|
||||
<?php
|
||||
namespace Incoviba\Common\Implement\Log;
|
||||
namespace Incoviba\Common\Implement\Log\Formatter;
|
||||
|
||||
use Monolog\Formatter\JsonFormatter;
|
||||
use Monolog\LogRecord;
|
||||
|
||||
class PDOFormatter extends JsonFormatter
|
||||
class PDO extends JsonFormatter
|
||||
{
|
||||
public function __construct(int $batchMode = self::BATCH_MODE_JSON, bool $appendNewline = false, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = true)
|
||||
{
|
@ -1,13 +1,13 @@
|
||||
<?php
|
||||
namespace Incoviba\Common\Implement\Log;
|
||||
namespace Incoviba\Common\Implement\Log\Handler;
|
||||
|
||||
use PDOStatement;
|
||||
use Monolog\Handler\AbstractProcessingHandler;
|
||||
use Monolog\LogRecord;
|
||||
use Monolog\Level;
|
||||
use Incoviba\Common\Define\Connection;
|
||||
use Monolog\Handler\AbstractProcessingHandler;
|
||||
use Monolog\Level;
|
||||
use Monolog\LogRecord;
|
||||
use PDOStatement;
|
||||
|
||||
class MySQLHandler extends AbstractProcessingHandler
|
||||
class MySQL extends AbstractProcessingHandler
|
||||
{
|
||||
private bool $initialized = false;
|
||||
private PDOStatement $statement;
|
32
app/common/Implement/Log/Processor/Request.php
Normal file
32
app/common/Implement/Log/Processor/Request.php
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
namespace Incoviba\Common\Implement\Log\Processor;
|
||||
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Monolog\LogRecord;
|
||||
use Monolog\Processor\ProcessorInterface;
|
||||
|
||||
class Request implements ProcessorInterface
|
||||
{
|
||||
public function __construct(protected ContainerInterface $container) {}
|
||||
|
||||
public function __invoke(LogRecord $record): LogRecord
|
||||
{
|
||||
$request = $this->container->get(ServerRequestInterface::class);
|
||||
$serverFilters = [
|
||||
'HTTP_',
|
||||
'QUERY_',
|
||||
'REDIRECT_',
|
||||
'REMOTE_',
|
||||
'REQUEST_',
|
||||
];
|
||||
$serverParams = array_filter($request->getServerParams(),
|
||||
fn($key) => count(array_filter($serverFilters, fn($prefix) => str_starts_with($key, $prefix))) > 0,
|
||||
ARRAY_FILTER_USE_KEY);
|
||||
$record->extra['request'] = [
|
||||
'server' => $serverParams,
|
||||
'headers' => $request->getHeaders(),
|
||||
];
|
||||
return $record;
|
||||
}
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
<?php
|
||||
namespace Incoviba\Common\Implement\Log;
|
||||
namespace Incoviba\Common\Implement\Log\Processor;
|
||||
|
||||
use Incoviba\Service;
|
||||
use Monolog\LogRecord;
|
||||
use Monolog\Processor\ProcessorInterface;
|
||||
use Incoviba\Service;
|
||||
|
||||
class UserProcessor implements ProcessorInterface
|
||||
class User implements ProcessorInterface
|
||||
{
|
||||
public function __construct(protected Service\Login $loginService) {}
|
||||
public function __invoke(LogRecord $record): LogRecord
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
use Psr\Container\ContainerInterface;
|
||||
|
||||
return [
|
||||
@ -39,14 +40,14 @@ return [
|
||||
($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development')
|
||||
? (new Monolog\Handler\StreamHandler('/logs/notices.log'))
|
||||
->setFormatter($container->get(Monolog\Formatter\LineFormatter::class))
|
||||
: (new Incoviba\Common\Implement\Log\MySQLHandler($container->get(Incoviba\Common\Define\Connection::class)))
|
||||
->setFormatter(new Incoviba\Common\Implement\Log\PDOFormatter()),
|
||||
: (new Incoviba\Common\Implement\Log\Handler\MySQL($container->get(Incoviba\Common\Define\Connection::class)))
|
||||
->setFormatter(new \Incoviba\Common\Implement\Log\Formatter\PDO()),
|
||||
Monolog\Level::Notice,
|
||||
Monolog\Level::Warning,
|
||||
false
|
||||
)
|
||||
], [
|
||||
$container->get(Incoviba\Common\Implement\Log\UserProcessor::class),
|
||||
$container->get(Incoviba\Common\Implement\Log\Processor\User::class),
|
||||
$container->get(Monolog\Processor\IntrospectionProcessor::class),
|
||||
$container->get(Monolog\Processor\WebProcessor::class),
|
||||
$container->get(Monolog\Processor\MemoryUsageProcessor::class),
|
||||
@ -69,6 +70,7 @@ return [
|
||||
return new Monolog\Logger('access', [
|
||||
new Monolog\Handler\RedisHandler($container->get(Predis\ClientInterface::class), 'logs:access'),
|
||||
], [
|
||||
$container->get(Incoviba\Common\Implement\Log\Processor\Request::class),
|
||||
$container->get(Monolog\Processor\IntrospectionProcessor::class),
|
||||
$container->get(Monolog\Processor\WebProcessor::class),
|
||||
$container->get(Monolog\Processor\MemoryUsageProcessor::class),
|
||||
|
@ -24,8 +24,18 @@ class Authentication
|
||||
if ($this->service->isIn() or $this->isValid($request)) {
|
||||
return $handler->handle($request);
|
||||
}
|
||||
$serverFilters = [
|
||||
'HTTP_',
|
||||
'QUERY_',
|
||||
'REDIRECT_',
|
||||
'REMOTE_',
|
||||
'REQUEST_',
|
||||
];
|
||||
$serverParams = array_filter($request->getServerParams(),
|
||||
fn($key) => count(array_filter($serverFilters, fn($prefix) => str_starts_with($key, $prefix))) > 0,
|
||||
ARRAY_FILTER_USE_KEY);
|
||||
$this->logger->notice("Not logged in.", [
|
||||
'Server' => $request->getServerParams(),
|
||||
'Server' => $serverParams,
|
||||
'Headers' => $request->getHeaders(),
|
||||
]);
|
||||
$response = $this->responseFactory->createResponse(307, 'Not logged in')
|
||||
|
@ -19,8 +19,18 @@ class NotAllowed
|
||||
try {
|
||||
return $handler->handle($request);
|
||||
} catch (HttpMethodNotAllowedException $exception) {
|
||||
$serverFilters = [
|
||||
'HTTP_',
|
||||
'QUERY_',
|
||||
'REDIRECT_',
|
||||
'REMOTE_',
|
||||
'REQUEST_',
|
||||
];
|
||||
$serverParams = array_filter($request->getServerParams(),
|
||||
fn($key) => count(array_filter($serverFilters, fn($prefix) => str_starts_with($key, $prefix))) > 0,
|
||||
ARRAY_FILTER_USE_KEY);
|
||||
$this->logger->warning($exception, [
|
||||
'Server' => $request->getServerParams(),
|
||||
'Server' => $serverParams,
|
||||
'Headers' => $request->getHeaders(),
|
||||
]);
|
||||
$response = $this->responseFactory->createResponse(405, 'Method Not Allowed');
|
||||
|
@ -21,8 +21,18 @@ class NotFound
|
||||
return $handler->handle($request);
|
||||
} catch (HttpNotFoundException |
|
||||
EmptyRedis | EmptyResult | Read | Create | Update | Delete $exception) {
|
||||
$serverFilters = [
|
||||
'HTTP_',
|
||||
'QUERY_',
|
||||
'REDIRECT_',
|
||||
'REMOTE_',
|
||||
'REQUEST_',
|
||||
];
|
||||
$serverParams = array_filter($request->getServerParams(),
|
||||
fn($key) => count(array_filter($serverFilters, fn($prefix) => str_starts_with($key, $prefix))) > 0,
|
||||
ARRAY_FILTER_USE_KEY);
|
||||
$this->logger->notice($exception, [
|
||||
'Server' => $request->getServerParams(),
|
||||
'Server' => $serverParams,
|
||||
'Headers' => $request->getHeaders(),
|
||||
]);
|
||||
$response = $this->responseFactory->createResponse(404, 'Not Found');
|
||||
|
Reference in New Issue
Block a user