I file di registro sono una parte fondamentale di qualsiasi applicazione seria: se la registrazione nell'app è valida, ti permettono di vedere quali eventi chiave sono accaduti e quando; quali errori si sono verificati; e lo stato generale dell'applicazione che va al di là di qualsiasi monitoraggio sia stato progettato. È comune ascoltare un problema, controllare la diagnostica integrata dell'applicazione (aprire la sua console Web o utilizzare uno strumento di diagnostica come JMX), quindi ricorrere al controllo del log files.
Se usi un formato non testuale, ti trovi subito di fronte a un ostacolo: come leggi i registri binari? Con lo strumento di lettura dei registri, che non si trova sui tuoi server di produzione! O lo è, ma oh caro, abbiamo aggiunto un nuovo campo e questo è il vecchio lettore. Non l'abbiamo provato? Sì, ma nessuno lo ha implementato qui. Nel frattempo, lo schermo inizia a illuminarsi con gli utenti che eseguono il ping.
O forse questa non è la tua app, ma stai supportando e pensi di sapere che è questo altro sistema e WTF? i registri sono in formato binario? Ok, inizia a leggere le pagine wiki e da dove inizi? Ora li ho copiati sul mio computer locale, ma - sono corrotti? Ho effettuato una sorta di trasferimento non binario? O lo strumento di lettura del registro è incasinato?
In breve, gli strumenti di lettura del testo sono multipiattaforma e onnipresenti e i registri sono spesso di lunga durata e talvolta devono essere letti in fretta . Se inventi un formato binario, allora sei tagliato fuori da un intero mondo di strumenti ben compresi e facili da usare. Grave perdita di funzionalità proprio quando ne hai bisogno.
La maggior parte degli ambienti di registrazione presenta un compromesso: mantiene i registri correnti leggibili e presenti e comprime quelli più vecchi. Ciò significa che si ottiene il vantaggio della compressione, soprattutto perché un formato binario non riduce i messaggi di registro. Allo stesso tempo, è possibile utilizzare meno e grep e così via.
Quindi, quali possibili benefici potrebbero derivare dall'uso del binario? Una piccola quantità di efficienza spaziale - sempre meno importante. Meno (o più piccoli) scritti? Bene, forse - in realtà, il numero di scritture sarà correlato al numero di commit del disco, quindi se le linee di registro sono significativamente più piccole della dimensione del blocco del disco, un SSD assegnerebbe comunque nuovi blocchi più e più volte. Quindi, binario è una scelta appropriata se:
- stai scrivendo enormi quantità di dati strutturati
- i registri devono essere creati in modo particolarmente rapido
- è improbabile che tu debba analizzarli in "condizioni di supporto"
ma questo suona meno come la registrazione dell'applicazione; questi sono file di output o record di attività. Inserirli in un file è probabilmente solo a un passo dalla loro scrittura in un database.
MODIFICARE
Penso che qui ci sia una confusione generale tra "registri di programma" (come per i framework di registrazione) e "record" (come nei registri di accesso, record di accesso, ecc.). Sospetto che la domanda riguardi più da vicino quest'ultima, e in tal caso la questione è molto meno ben definita. È perfettamente accettabile che un record di messaggi o un registro attività sia in un formato compatto, soprattutto perché è probabile che sia ben definito e utilizzato per l'analisi piuttosto che per la risoluzione dei problemi. Gli strumenti che fanno questo includono tcpdump
e il monitor di sistema Unix sar
. I registri dei programmi invece tendono ad essere molto più ad hoc.