Os arquivos de log são uma parte crítica de qualquer aplicativo sério: se o login no aplicativo for bom, eles permitem que você veja quais eventos importantes aconteceram e quando; que erros ocorreram; e integridade geral do aplicativo que vai além do monitoramento projetado. É comum ouvir sobre um problema, verificar os diagnósticos internos do aplicativo (abrir o console da Web ou usar uma ferramenta de diagnóstico como JMX) e, em seguida, recorrer à verificação do arquivos de log.
Se você usa um formato não textual, é imediatamente confrontado com um obstáculo: como você lê os logs binários? Com a ferramenta de leitura de log, que não está nos servidores de produção! Ou é, mas, nossa nossa, adicionamos um novo campo e este é o antigo leitor. Não testamos isso? Sim, mas ninguém o implantou aqui. Enquanto isso, sua tela começa a se iluminar com os usuários fazendo o ping.
Ou talvez esse não seja o seu aplicativo, mas você está dando suporte e acha que sabe que é esse outro sistema e o WTF? os logs estão em um formato binário? Ok, comece a ler as páginas da wiki e por onde começar? Agora eu os copiei na minha máquina local, mas - eles estão corrompidos? Eu fiz algum tipo de transferência não binária? Ou a ferramenta de leitura de log está desarrumada?
Em resumo, as ferramentas de leitura de texto são multiplataforma e onipresentes, e os logs geralmente têm vida longa e às vezes precisam ser lidos às pressas . Se você inventa um formato binário, fica isolado de um mundo inteiro de ferramentas bem compreendidas e fáceis de usar. Grave perda de funcionalidade exatamente quando você precisar.
A maioria dos ambientes de log é comprometida: mantenha os logs atuais legíveis e presentes e comprima os mais antigos. Isso significa que você obtém o benefício da compactação - mais ainda, porque um formato binário não diminui as mensagens de log. Ao mesmo tempo, você pode usar menos e grep e assim por diante.
Então, quais possíveis benefícios podem surgir do uso de binário? Uma pequena quantidade de eficiência de espaço - cada vez mais sem importância. Menos gravações (ou menores)? Bem, talvez - na verdade, o número de gravações esteja relacionado ao número de confirmações de disco; portanto, se as linhas de log forem significativamente menores que o tamanho do bloco de disco, um SSD estaria atribuindo novos blocos repetidamente. Portanto, binário é uma escolha apropriada se:
- você está escrevendo grandes quantidades de dados estruturados
- os logs devem ser criados particularmente rapidamente
- é improvável que você precise analisá-los em "condições de suporte"
mas isso parece menos com o log de aplicativos; esses são arquivos de saída ou registros de atividades. Colocá-los em um arquivo provavelmente está apenas a um passo de gravá-los em um banco de dados.
EDITAR
Eu acho que há uma confusão geral aqui entre "logs de programas" (conforme estruturas de log) e "registros" (como em logs de acesso, registros de logon etc.). Suspeito que a questão esteja mais intimamente relacionada com a última e, nesse caso, a questão é muito menos bem definida. É perfeitamente aceitável que um registro de mensagens ou log de atividades esteja em um formato compacto, especialmente porque provavelmente será bem definido e usado para análise, em vez de solução de problemas. As ferramentas que fazem isso incluem tcpdump
e o monitor do sistema Unix sar
. Os logs do programa, por outro lado, tendem a ser muito mais ad hoc.