docs: consolidate documentation into organized structure

- Move 12 markdown files from root to docs/ subdirectories
- Organize documentation by category:
  • docs/troubleshooting/ (1 file)  - Technical troubleshooting guides
  • docs/deployment/      (4 files) - Deployment and security documentation
  • docs/guides/          (3 files) - Feature-specific guides
  • docs/planning/        (4 files) - Planning and improvement proposals

Root directory cleanup:
- Reduced from 16 to 4 markdown files in root
- Only essential project files remain:
  • CLAUDE.md (AI instructions)
  • README.md (Main project readme)
  • CLEANUP_PLAN.md (Current cleanup plan)
  • SRC_STRUCTURE_IMPROVEMENTS.md (Structure improvements)

This improves:
 Documentation discoverability
 Logical organization by purpose
 Clean root directory
 Better maintainability
This commit is contained in:
2025-10-05 11:05:04 +02:00
parent 887847dde6
commit 5050c7d73a
36686 changed files with 196456 additions and 12398919 deletions

View File

@@ -7,6 +7,7 @@ namespace App\Application\System;
use App\Framework\Core\Events\ApplicationBooted;
use App\Framework\Core\Events\OnEvent;
use App\Framework\Logging\DefaultLogger;
use App\Framework\Logging\ValueObjects\LogContext;
final readonly class BootLogger
{
@@ -20,11 +21,13 @@ final readonly class BootLogger
{
#echo "[Boot] {$event->bootTime->format('H:i:s')} | Env: {$event->environment}\n";
$this->logger->info('Application booted', [
$context = LogContext::withData([
'boot_time' => $event->bootTime->format('Y-m-d H:i:s.u'),
'environment' => $event->environment,
'memory_usage' => memory_get_usage(true),
'peak_memory' => memory_get_peak_usage(true),
]);
])->addTags('application', 'boot');
$this->logger->info('Application booted', $context);
}
}

View File

@@ -6,20 +6,55 @@ namespace App\Application\System;
use App\Framework\Core\Events\ErrorOccurred;
use App\Framework\Core\Events\OnEvent;
use App\Framework\Logging\LogContextManager;
use App\Framework\Logging\Logger;
use App\Framework\Logging\ValueObjects\LogContext;
final readonly class ErrorLogger
{
public function __construct(
private ?Logger $logger = null,
private ?LogContextManager $contextManager = null
) {
}
/**
* Logger für aufgetretene Fehler
* Logger für aufgetretene Fehler mit strukturiertem Logging
*/
#[OnEvent(priority: 10)]
public function logError(ErrorOccurred $event): void
{
$time = $event->occurredAt->format('Y-m-d H:i:s');
$requestId = $event->requestId ? "[Request: {$event->requestId}]" : '';
$message = "[{$time}] ERROR {$requestId} {$event->context}: {$event->error->getMessage()}";
if ($this->logger === null) {
// Fallback für den Fall, dass kein Logger verfügbar ist
$time = $event->occurredAt->format('Y-m-d H:i:s');
$requestId = $event->requestId ? "[Request: {$event->requestId}]" : '';
$message = "[{$time}] ERROR {$requestId} {$event->context}: {$event->error->getMessage()}";
error_log($message);
// In einer produktiven Umgebung würden wir hier in eine Datei oder einen Service loggen
error_log($message);
return;
}
// Strukturiertes Logging mit LogContext
$context = LogContext::withData([
'error_context' => $event->context,
'occurred_at' => $event->occurredAt->format('c'),
'request_id' => $event->requestId,
'error_class' => get_class($event->error),
'error_file' => $event->error->getFile(),
'error_line' => $event->error->getLine(),
])->addTags('error_event', 'application');
// Current context hinzufügen falls verfügbar
if ($this->contextManager !== null) {
$currentContext = $this->contextManager->getCurrentContext();
$mergedContext = $currentContext->merge($context);
} else {
$mergedContext = $context;
}
$this->logger->error(
sprintf('Application error in %s: %s', $event->context, $event->error->getMessage()),
$mergedContext
);
}
}