🛡️ Mensagem
ErrorTracker
$ composer require heliomarpm/error-tracker
⚡ Arquitetura Moderna PHP 8.2+ & PSR-3 / PSR-16

Biblioteca robusta para monitoramento de falhas críticas com tolerância a desastres e zero ruído.

Interceptação inteligente de exceções com deduplicação anti-flood, sanitização automática de dados sensíveis (LGPD/PCI-DSS) e despacho desacoplado para múltiplos canais.

🛡️
0
Simulações Disparadas
🛑
0
Duplicatas Silenciadas
🔒
100%
Campos LGPD Mascarados
📡
5 Handlers
GitHub, Webhook, DB, Mail & Log

            
[ERROR] Incidente Detectado

            
🚨 [ERROR] Incidente Detectado
Falha de comunicação
Payload JSON despachado para a API:

              
🚨 **[ERROR] Incidente Detectado**
Título do Embed
Payload JSON:

              
📁 storage/logs/incident.log
LOCK_EX Ativo

            
🗄️ Tabela: error_tracker
Upsert com Reincidência
Instrução SQL Executada:

              
Colunas & Valores Persistidos:
Coluna payload (JSON Sanitizado):

              

O DataSanitizer ofusca e-mails, CPFs e cartões, além de eliminar senhas e tokens de autenticação em $_POST e $_SERVER antes do despacho.

⚠️ Payload Bruto Enviado ($_POST) Exposto
{ "username": "carlos_dev", "password": "minhaSenhaSuperSecreta123", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "cpf": "123.456.789-10", "credit_card": "4532 1122 3344 9876", "email": "suporte.tech@empresa.com.br" }
✅ Payload Sanitizado ($context->requestData) Protegido
{ "username": "carlos_dev", "password": "********", "token": "********", "cpf": "***.***.789-10", "credit_card": "**** **** **** 9876", "email": "sup*********@empresa.com.br" }

Eventos capturados nesta sessão (armazenamento estritamente local em localStorage, zero-disk no servidor).

Timestamp Severidade Mensagem Arquivo : Linha Hash Único Ações
Nenhum incidente registrado ainda nesta sessão. Dispare um erro na barra lateral!

Receitas de código PHP 8.2+ prontas para copiar e colar na sua aplicação:

bootstrap.php
<?php

declare(strict_types=1);

use HeliomarPM\ErrorTracker\ErrorTracker;
use HeliomarPM\ErrorTracker\Cache\FileCache;
use HeliomarPM\ErrorTracker\Handlers\FilelogHandler;
use HeliomarPM\ErrorTracker\Handlers\EmailHandler;
use HeliomarPM\ErrorTracker\Severity;

require_once __DIR__ . '/vendor/autoload.php';

// 1. Configura cache PSR-16 com TTL de 3600s para deduplicação anti-flood
$cache = new FileCache(__DIR__ . '/storage/cache/errors');
$tracker = new ErrorTracker($cache, 3600);

// 2. Registra os canais de alerta desejados
$tracker->addHandler(new FilelogHandler(__DIR__ . '/storage/logs'))
        ->addHandler(new EmailHandler('devops@empresa.com', notifySeverities: [Severity::CRITICAL]));

// 3. Rota de Fuga amigável em incidentes críticos (Failsafe)
$tracker->onCritical(function ($context) {
    header("Location: /500.php?ref={$context->hash}");
    exit;
});

// 4. Ativa interceptadores globais de Exceptions, Errors e Fatals
$tracker->register();
GitHubIssueHandler.php
use HeliomarPM\ErrorTracker\Handlers\GitHubIssueHandler;
use HeliomarPM\ErrorTracker\Severity;

// Abre issues no GitHub automaticamente com deduplicação inteligente de reincidência
$githubHandler = new GitHubIssueHandler(
    token: $_ENV['GITHUB_TOKEN'], // Fine-grained PAT com permissão Issues: Read and write
    repository: 'minha-empresa/meu-sistema',
    application: 'Checkout API (Prod)',
    notifySeverities: [Severity::CRITICAL, Severity::WARNING],
    timeoutSeconds: 3,
    deduplicateOpenIssues: true // Adiciona comentário na issue se já estiver aberta!
);

$tracker->addHandler($githubHandler);
WebhookHandler.php (Slack & Discord)
use HeliomarPM\ErrorTracker\Handlers\WebhookHandler;
use HeliomarPM\ErrorTracker\Severity;

// Envio para canal do Slack
$slackHandler = new WebhookHandler(
    webhookUrl: $_ENV['SLACK_WEBHOOK_URL'],
    notifySeverities: [Severity::CRITICAL, Severity::WARNING],
    format: 'slack',
    timeoutSeconds: 3
);

// Envio para canal do Discord
$discordHandler = new WebhookHandler(
    webhookUrl: $_ENV['DISCORD_WEBHOOK_URL'],
    format: 'discord',
    timeoutSeconds: 3
);

$tracker->addHandler($slackHandler)
        ->addHandler($discordHandler);
DatabaseHandler.php (MySQL / MariaDB / SQLite)
use HeliomarPM\ErrorTracker\Handlers\DatabaseHandler;
use PDO;

// Conexão PDO existente da sua aplicação (MySQL ou SQLite)
$pdo = new PDO("mysql:host=localhost;dbname=meu_banco;charset=utf8mb4", "root", "senha");

// autoCreateTable: true cria a tabela 'error_tracker' com índices e campos automaticamente
$dbHandler = new DatabaseHandler(
    pdo: $pdo,
    tableName: 'error_tracker',
    autoCreateTable: true,
    notifySeverities: null // null registra todos os incidentes
);

$tracker->addHandler($dbHandler);
FilelogHandler.php & EmailHandler.php
use HeliomarPM\ErrorTracker\Handlers\FilelogHandler;
use HeliomarPM\ErrorTracker\Handlers\EmailHandler;
use HeliomarPM\ErrorTracker\Severity;

// Log rotacionado diariamente com proteção de escrita exclusiva LOCK_EX
$filelog = new FilelogHandler(
    logDirectory: __DIR__ . '/storage/logs',
    notifySeverities: [Severity::CRITICAL, Severity::WARNING]
);

// Disparo de e-mail formatado em HTML estilizado via mail()
$email = new EmailHandler(
    to: 'suporte@empresa.com',
    from: 'noreply@empresa.com',
    notifySeverities: [Severity::CRITICAL],
    format: 'html' // ou 'text'
);

$tracker->addHandler($filelog)->addHandler($email);
Uso como Logger PSR-3 (Logs do Dia a Dia)
// 1. Log informativo de negócio (Sem ruído de exceção ou stack trace fake)
$tracker->info("Tentativa de login com senha inválida", [
    'username' => 'carlos.dev',
    'ip'       => '192.168.1.100',
    'tentativa' => 3
]);

// 2. Alerta Operacional
$tracker->warning("Estoque do produto #458 abaixo do limite mínimo.");

// 3. Falha Crítica com Exceção Encadeada
try {
    // rotina crítica...
} catch (Throwable $e) {
    $tracker->error("Falha no checkout de pagamento", [
        'pedido_id' => 1042,
        'exception' => $e // Se passado, o stack trace real da exceção é preservado!
    ]);
}