Co-authored-by: Juan Pablo Vial <jpvialb@incoviba.cl>
Reviewed-on: #45
This commit is contained in:
2025-10-04 11:40:52 -03:00
parent 6ddc48ec60
commit 742de657c5
815 changed files with 62089 additions and 3287 deletions

View File

@ -1,38 +1,155 @@
<?php
use Psr\Container\ContainerInterface;
return [
Psr\Log\LoggerInterface::class => function(ContainerInterface $container) {
return new Monolog\Logger('incoviba', [
new Monolog\Handler\FilterHandler(
(new Monolog\Handler\RotatingFileHandler('/logs/debug.log', 10))
->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)),
Monolog\Level::Debug,
Monolog\Level::Debug
),
new Monolog\Handler\FilterHandler(
(new Monolog\Handler\RotatingFileHandler('/logs/info.log', 10))
->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)),
Monolog\Level::Info,
Monolog\Level::Warning,
),
new Monolog\Handler\FilterHandler(
(new Monolog\Handler\RotatingFileHandler('/logs/error.log', 10))
->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)),
Monolog\Level::Error,
Monolog\Level::Error
),
new Monolog\Handler\FilterHandler(
(new Monolog\Handler\RotatingFileHandler('/logs/critical.log', 10))
->setFormatter(new Monolog\Formatter\LineFormatter(null, null, false, false, true)),
Monolog\Level::Critical
)
], [
$container->get(Monolog\Processor\PsrLogMessageProcessor::class),
$container->get(Monolog\Processor\WebProcessor::class),
$container->get(Monolog\Processor\IntrospectionProcessor::class),
$container->get(Monolog\Processor\MemoryUsageProcessor::class),
$container->get(Monolog\Processor\MemoryPeakUsageProcessor::class)
Monolog\Processor\WebProcessor::class => function(ContainerInterface $container) {
return new Monolog\Processor\WebProcessor(null, [
'HTTP_X_FORWARDED_FOR',
'HTTP_CLIENT_IP',
'HTTP_X_CLIENT_IP',
'HTTP_X_REAL_IP',
'REMOTE_ADDR',
'REMOTE_HOST',
]);
}
},
Monolog\Formatter\LineFormatter::class => function(ContainerInterface $container) {
return (new Monolog\Formatter\LineFormatter(null, null, false, false, true))
->setBasePath('/code/');
},
'baseMonologProcessors' => function(ContainerInterface $container) {
return [
$container->get(Monolog\Processor\IntrospectionProcessor::class),
$container->get(Monolog\Processor\WebProcessor::class),
$container->get(Monolog\Processor\MemoryUsageProcessor::class),
$container->get(Monolog\Processor\MemoryPeakUsageProcessor::class),
$container->get(Monolog\Processor\PsrLogMessageProcessor::class),
$container->get(Monolog\Processor\UidProcessor::class),
$container->get(Incoviba\Common\Implement\Log\Processor\Exception::class),
];
},
'baseDefaultHandlers' => function(ContainerInterface $container) {
return [
'critical' => [
'handler' => Monolog\Handler\RotatingFileHandler::class,
'filename' => 'critical.log',
'levels' => Monolog\Level::Critical
],
'error' => [
'handler' => Monolog\Handler\RotatingFileHandler::class,
'filename' => 'error.log',
'levels' => [Monolog\Level::Error, Monolog\Level::Error],
],
'notices' => [
'handler' => Incoviba\Common\Implement\Log\Handler\MySQL::class,
'levels' => [Monolog\Level::Notice, Monolog\Level::Warning]
],
'debug' => [
'handler' => Monolog\Handler\RedisHandler::class,
'name' => 'notices',
'levels' => [Monolog\Level::Debug, Monolog\Level::Info]
],
];
},
'developmentHandlers' => function(ContainerInterface $container) {
$baseHandlers = $container->get('baseDefaultHandlers');
$baseHandlers['critical']['handler'] = Monolog\Handler\StreamHandler::class;
$baseHandlers['error']['handler'] = Monolog\Handler\StreamHandler::class;
$baseHandlers['notices']['handler'] = Monolog\Handler\StreamHandler::class;
$baseHandlers['notices']['filename'] = 'notices.log';
$baseHandlers['debug']['handler'] = Monolog\Handler\StreamHandler::class;
$baseHandlers['debug']['filename'] = 'debug.log';
return $baseHandlers;
},
'defaultMonologHandlers' => function(ContainerInterface $container) {
$key = 'baseDefault';
if ($container->has('ENVIRONMENT') and $container->get('ENVIRONMENT') === 'development') {
$key = 'development';
if (!$container->has("{$key}Handlers")) {
$key = 'baseDefault';
}
}
$baseHandlers = $container->get("{$key}Handlers");
$builder = $container->get(Incoviba\Common\Implement\Log\Processor\ArrayBuilder::class);
return $builder->build($baseHandlers);
},
Psr\Log\LoggerInterface::class => function(ContainerInterface $container) {
return new Monolog\Logger('incoviba',
$container->get('defaultMonologHandlers'),
[$container->get(Incoviba\Common\Implement\Log\Processor\User::class)]
+ $container->get('baseMonologProcessors'),
$container->get(DateTimeZone::class)
);
},
'jsonHandlers' => function(ContainerInterface $container) {
$baseHandlers = $container->get('baseDefaultHandlers');
$baseHandlers['debug']['handler'] = Monolog\Handler\RotatingFileHandler::class;
$baseHandlers['debug']['filename'] = 'info.json';
$baseHandlers['debug']['formatter'] = Monolog\Formatter\JsonFormatter::class;
$baseHandlers['notices']['handler'] = Monolog\Handler\RotatingFileHandler::class;
$baseHandlers['notices']['filename'] = 'notices.json';
$baseHandlers['notices']['formatter'] = Monolog\Formatter\JsonFormatter::class;
return $baseHandlers;
},
'jsonLogger' => function(ContainerInterface $container) {
$builder = $container->get(Incoviba\Common\Implement\Log\Processor\ArrayBuilder::class);
$handlers = $builder->build($container->get('jsonHandlers'));
return new Monolog\Logger('json',
$handlers,
[$container->get(Incoviba\Common\Implement\Log\Processor\User::class)]
+ $container->get('baseMonologProcessors'),
$container->get(DateTimeZone::class)
);
},
'loginLogger' => function(ContainerInterface $container) {
return new Monolog\Logger('login',
[
new Monolog\Handler\RedisHandler($container->get(Predis\ClientInterface::class), 'logs:login'),
],
$container->get('baseMonologProcessors'),
$container->get(DateTimeZone::class)
);
},
'accessLogger' => function(ContainerInterface $container) {
return new Monolog\Logger('access',
[
new Monolog\Handler\RedisHandler($container->get(Predis\ClientInterface::class), 'logs:access'),
],
$container->get('baseMonologProcessors'),
$container->get(DateTimeZone::class)
);
},
'externalHandlers' => function(ContainerInterface $container) {
return [
'critical' => [
'handler' => Monolog\Handler\RedisHandler::class,
'name' => 'external:critical',
'levels' => Monolog\Level::Critical
],
'error' => [
'handler' => Monolog\Handler\RedisHandler::class,
'name' => 'external:error',
'levels' => [Monolog\Level::Error, Monolog\Level::Error],
],
'notices' => [
'handler' => Monolog\Handler\RedisHandler::class,
'name' => 'external:notices',
'levels' => [Monolog\Level::Notice, Monolog\Level::Warning],
],
'debug' => [
'handler' => Monolog\Handler\RedisHandler::class,
'name' => 'external:debug',
'levels' => [Monolog\Level::Debug, Monolog\Level::Info],
],
];
},
'externalLogger' => function(ContainerInterface $container) {
$builder = $container->get(Incoviba\Common\Implement\Log\Processor\ArrayBuilder::class);
$handlers = $builder->build($container->get('externalHandlers'));
return new Monolog\Logger('external',
$handlers,
$container->get('baseMonologProcessors'),
$container->get(DateTimeZone::class)
);
},
];