|
| 1 | +<?php |
| 2 | +/** |
| 3 | + * Analisador de Logs de Erro |
| 4 | + * |
| 5 | + * Este script analisa o arquivo de log de erros (logs/error.log) e gera um relatório |
| 6 | + * que mostra os erros mais comuns agrupados por domínio. É útil para identificar |
| 7 | + * padrões de falhas e problemas recorrentes em diferentes domínios. |
| 8 | + * |
| 9 | + * Funcionamento: |
| 10 | + * 1. Lê o arquivo de log linha por linha |
| 11 | + * 2. Extrai a URL e a mensagem de erro de cada linha |
| 12 | + * 3. Agrupa os erros por domínio |
| 13 | + * 4. Conta a frequência de cada tipo de erro |
| 14 | + * 5. Exibe um relatório formatado |
| 15 | + * |
| 16 | + * Uso: |
| 17 | + * php logs/index.php |
| 18 | + * |
| 19 | + * Formato esperado do log: |
| 20 | + * [DATA HORA] URL: http://exemplo.com - Error: Mensagem de erro |
| 21 | + */ |
| 22 | + |
| 23 | +// Verifica se está sendo executado via CLI |
| 24 | +if (php_sapi_name() !== 'cli') { |
| 25 | + die('Este script só pode ser executado via linha de comando.'); |
| 26 | +} |
| 27 | + |
| 28 | +// Caminho para o arquivo de log |
| 29 | +$logFile = __DIR__ . '/error.log'; |
| 30 | + |
| 31 | +// Verifica se o arquivo de log existe |
| 32 | +if (!file_exists($logFile)) { |
| 33 | + die("Arquivo de log não encontrado: $logFile\n"); |
| 34 | +} |
| 35 | + |
| 36 | +$errors = []; |
| 37 | + |
| 38 | +// Lê o arquivo de log |
| 39 | +$lines = file($logFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); |
| 40 | + |
| 41 | +foreach ($lines as $line) { |
| 42 | + // Extrai URL e mensagem de erro usando expressão regular |
| 43 | + if (preg_match('/URL: (https?:\/\/[^\s]+) - Error: (.+)$/', $line, $matches)) { |
| 44 | + $url = $matches[1]; |
| 45 | + $error = $matches[2]; |
| 46 | + |
| 47 | + // Extrai o domínio da URL |
| 48 | + $domain = parse_url($url, PHP_URL_HOST); |
| 49 | + |
| 50 | + // Inicializa o array do domínio se não existir |
| 51 | + if (!isset($errors[$domain])) { |
| 52 | + $errors[$domain] = []; |
| 53 | + } |
| 54 | + |
| 55 | + // Conta ocorrências de erro para este domínio |
| 56 | + if (!isset($errors[$domain][$error])) { |
| 57 | + $errors[$domain][$error] = 0; |
| 58 | + } |
| 59 | + $errors[$domain][$error]++; |
| 60 | + } |
| 61 | +} |
| 62 | + |
| 63 | +// Exibe os resultados |
| 64 | +echo "Análise de Erros por Domínio:\n"; |
| 65 | +echo "============================\n\n"; |
| 66 | + |
| 67 | +foreach ($errors as $domain => $domainErrors) { |
| 68 | + echo "Domínio: " . $domain . "\n"; |
| 69 | + echo "-------------------------\n"; |
| 70 | + |
| 71 | + foreach ($domainErrors as $error => $count) { |
| 72 | + echo "- " . $error . ": " . $count . " ocorrência(s)\n"; |
| 73 | + } |
| 74 | + echo "\n"; |
| 75 | +} |
0 commit comments