AuditLog.php 1.19 KB
<?php

final class AuditLog
{
    public static function record(string $usuario, string $acao, ?string $alvo = null, ?string $detalhe = null): void
    {
        $ip = $_SERVER['REMOTE_ADDR'] ?? null;

        try {
            $stmt = Database::pdo()->prepare(
                'INSERT INTO audit_log (usuario, acao, alvo, detalhe, ip) VALUES (:usuario, :acao, :alvo, :detalhe, :ip)'
            );
            $stmt->execute([
                'usuario' => $usuario,
                'acao'    => $acao,
                'alvo'    => $alvo,
                'detalhe' => $detalhe,
                'ip'      => $ip,
            ]);
        } catch (Throwable $e) {
            // Nunca deixa uma falha de log derrubar a ação principal.
            error_log('AuditLog falhou: ' . $e->getMessage());
        }

        $logFile = Config::get('app.log_file');
        if ($logFile) {
            $line = sprintf(
                "%s|%s|%s|%s|%s|%s\n",
                date('Y-m-d H:i:s'),
                $ip,
                $usuario,
                $acao,
                $alvo ?? '-',
                $detalhe ?? '-'
            );
            @file_put_contents($logFile, $line, FILE_APPEND | LOCK_EX);
        }
    }
}