Projeto intermediário em C++17 para análise eficiente de ficheiros de log grandes.
Todo o código-fonte (identificadores, comentários e mensagens) está em português, com excepção das palavras reservadas da linguagem e dos nomes de níveis de log (
INFO,WARNING,ERROR,DEBUG).
| Função | Descrição |
|---|---|
| Leitura de ficheiros | std::filesystem + streams com buffer |
| Parsing de linhas | Vários formatos via std::regex + string_view |
| Níveis | DEBUG, INFO, WARNING, ERROR |
| Contagem de erros | Estatísticas agregadas |
| Padrões | Normalização de IDs/números e top-N frequentes |
| Filtros por data | --desde / --ate (chrono) |
| Filtros por severidade | --nivel / --min-nivel |
| Pesquisa textual | Substring e/ou regex |
| Exportação | Relatórios txt, csv e json |
| Estratégias de I/O | linha-a-linha · buffer completo · blocos |
std::filesystemstd::regexstd::string_viewstd::unordered_map<algorithm>(copy_if,partial_sort,transform, …)std::chrono- streams (
ifstream/ofstream) - tratamento de excepções tipadas
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failure
Binários:
build/analisador_logs— aplicação CLIbuild/teste_analisador— testes do parser/filtros/leiturabuild/benchmark_leitura— comparação de estratégias
./build/analisador_logs ajuda
./build/analisador_logs analisar exemplos/aplicacao.log --nivel ERROR
./build/analisador_logs pesquisar exemplos/aplicacao.log --texto timeout --desde 2024-01-15
./build/analisador_logs estatisticas exemplos/aplicacao.log --estrategia blocos
./build/analisador_logs exportar exemplos/aplicacao.log --formato json --saida dados/relatorio.json
| Opção | Efeito |
|---|---|
--nivel INFO|WARNING|ERROR|DEBUG |
Filtro exacto |
--min-nivel <NIVEL> |
Severidade mínima |
--desde / --ate |
Intervalo de datas YYYY-MM-DD |
--texto |
Pesquisa substring (case-insensitive) |
--regex |
Expressão regular |
--estrategia linha|buffer|blocos |
Estratégia de leitura |
--formato txt|csv|json |
Formato de exportação |
--saida <caminho> |
Destino do relatório |
--limite N |
Limitar linhas mostradas |
Três estratégias comparáveis via benchmark:
- linha-a-linha —
getline+ buffer de 1 MiB (menor pico de RAM) - buffer-completo — ficheiro inteiro em memória + partição por
string_view - blocos — leitura em blocos de 4 MiB (compromisso memória/velocidade)
./build/benchmark_leitura 200000
LogAnalyzer/
├── CMakeLists.txt
├── include/analisador/ # biblioteca header-only
├── src/principal.cpp
├── testes/
├── benchmarks/
├── exemplos/aplicacao.log
├── docs/imagens/
└── dados/
Documentação adicional: docs/ARQUITETURA.md · docs/GUIA_UTILIZADOR.md
MIT — ver LICENSE.




