refactor: improve logging system and add deployment fixes
- Enhance logging handlers (Console, DockerJson, File, JsonFile, MultiFile) - Improve exception and line formatters - Update logger initialization and processor management - Add Ansible playbooks for staging 502 error troubleshooting - Update deployment documentation - Fix serializer and queue components - Update error kernel and queued log handler
This commit is contained in:
@@ -16,6 +16,7 @@ use App\Framework\Discovery\DiscoveryServiceBootstrapper;
|
||||
use App\Framework\Http\ResponseEmitter;
|
||||
use App\Framework\Logging\DefaultLogger;
|
||||
use App\Framework\Logging\Logger;
|
||||
use App\Framework\Logging\LoggerInitializer;
|
||||
use App\Framework\Performance\Contracts\PerformanceCollectorInterface;
|
||||
use App\Framework\Reflection\CachedReflectionProvider;
|
||||
|
||||
@@ -135,12 +136,22 @@ final readonly class ContainerBootstrapper
|
||||
PerformanceCollectorInterface $collector
|
||||
): void {
|
||||
// Core services that need runtime data
|
||||
$container->instance(Logger::class, new DefaultLogger());
|
||||
// Clock must be registered first as it's required by Logger
|
||||
// Only create if not already registered (e.g. by ClockInitializer)
|
||||
if (! $container->has(Clock::class)) {
|
||||
$container->instance(Clock::class, new SystemClock());
|
||||
}
|
||||
$clock = $container->get(Clock::class);
|
||||
$container->instance(PathProvider::class, new PathProvider($basePath));
|
||||
$init = $container->get(LoggerInitializer::class);
|
||||
|
||||
$logger = $container->invoker->invoke(LoggerInitializer::class, '__invoke');
|
||||
|
||||
$container->instance(Logger::class, $logger);
|
||||
$container->instance(PerformanceCollectorInterface::class, $collector);
|
||||
$container->instance(Cache::class, new CacheInitializer($collector, $container)());
|
||||
$container->instance(PathProvider::class, new PathProvider($basePath));
|
||||
|
||||
$container->instance(ResponseEmitter::class, new ResponseEmitter());
|
||||
$container->instance(Clock::class, new SystemClock());
|
||||
|
||||
// TEMPORARY FIX: Manual RequestFactory binding until Discovery issue is resolved
|
||||
$container->singleton(\App\Framework\Http\Request::class, function ($container) {
|
||||
@@ -220,9 +231,15 @@ final readonly class ContainerBootstrapper
|
||||
$isMcpMode = getenv('MCP_SERVER_MODE') === '1';
|
||||
$handlers = $isMcpMode
|
||||
? [new \App\Framework\Logging\Handlers\NullHandler()]
|
||||
: [new \App\Framework\Logging\Handlers\ConsoleHandler()];
|
||||
: [
|
||||
new \App\Framework\Logging\Handlers\ConsoleHandler(
|
||||
new \App\Framework\Logging\Formatter\DevelopmentFormatter(),
|
||||
\App\Framework\Logging\LogLevel::DEBUG
|
||||
)
|
||||
];
|
||||
|
||||
$logger = new \App\Framework\Logging\DefaultLogger(
|
||||
clock: $clock,
|
||||
minLevel: \App\Framework\Logging\LogLevel::DEBUG,
|
||||
handlers: $handlers,
|
||||
processorManager: new \App\Framework\Logging\ProcessorManager(),
|
||||
|
||||
Reference in New Issue
Block a user