mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-27 00:59:18 +02:00
Integrate Monolog: replace four logging systems with single PSR-3 factory
- Add monolog/monolog dependency (^3.10)
- Create app/Logger.php central factory with channels: app, admin, error, audit
- Each channel gets RotatingFileHandler (30-day retention) with pass-through LineFormatter
preserving existing JSON format contracts
- Rewrite AppLogger as thin facade delegating to Logger::get('app')
- Rewrite ErrorHandler::log() to delegate to Logger::get('error')
- Rewrite AdminLogger file output to delegate to Logger::get('admin'), keep DB writes
- Add Monolog file shadow to Audit via Logger::get('audit') (Option A per monolog-plan)
- Log level controlled by LOG_LEVEL env var (defaults: DEBUG in cli-server, WARNING otherwise)
- Graceful NullHandler fallback when log directory is not writable
- Update SystemController LOG_FILES: remove php_error, add app/admin/error/audit
- JSON app logs parsed to readable one-liners in the log viewer
- Remove nginx config tab (parametres + fragment + template + css)
- Friendly empty-state message when app log files don't exist yet (notYet)
- PHP tail fallback when exec() unavailable
- All 228 PHPUnit tests pass, no call sites changed
This commit is contained in:
@@ -3,9 +3,8 @@
|
||||
/**
|
||||
* Structured application logger for form submissions.
|
||||
*
|
||||
* Writes JSON-lines to a log file in storage/logs/.
|
||||
* Each entry contains: timestamp, source (admin|partage), action,
|
||||
* status (success|error), context (IP, UA, thesis ID, error message, etc.).
|
||||
* Thin facade over Monolog channel 'app'.
|
||||
* Delegates all file I/O — keeps existing public API unchanged.
|
||||
*/
|
||||
class AppLogger
|
||||
{
|
||||
@@ -16,10 +15,7 @@ class AppLogger
|
||||
{
|
||||
$this->logDir = $logDir ?? (defined('STORAGE_ROOT') ? STORAGE_ROOT . '/logs' : __DIR__ . '/../storage/logs');
|
||||
|
||||
if (!is_dir($this->logDir)) {
|
||||
mkdir($this->logDir, 0755, true);
|
||||
}
|
||||
|
||||
// Keep for backward compat — actual file I/O is now handled by Monolog via Logger::get('app')
|
||||
$this->logFile = $this->logDir . '/form-submissions.log';
|
||||
}
|
||||
|
||||
@@ -88,7 +84,7 @@ class AppLogger
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a structured log line.
|
||||
* Write a structured log line — delegates to Monolog 'app' channel.
|
||||
*/
|
||||
private function write(array $entry): void
|
||||
{
|
||||
@@ -96,7 +92,8 @@ class AppLogger
|
||||
$entry['ip'] = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
|
||||
$entry['user_agent'] = $_SERVER['HTTP_USER_AGENT'] ?? '';
|
||||
|
||||
$line = json_encode($entry, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . "\n";
|
||||
error_log($line, 3, $this->logFile);
|
||||
$line = json_encode($entry, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
|
||||
Logger::get('app')->info($line);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user