I file di log sono una parte critica di qualsiasi applicazione seria: se l'accesso all'app è buono, ti permettono di vedere quali eventi chiave sono accaduti e quando; quali errori si sono verificati; e salute generale dell'applicazione che va oltre il monitoraggio in cui è stato progettato. È comune sentire un problema, controllare la diagnostica integrata dell'applicazione (aprire la relativa console Web o utilizzare uno strumento diagnostico come JMX), quindi ricorrere al controllo file di registro.
Se utilizzi un formato non di testo, ti trovi immediatamente di fronte a un ostacolo: come leggi i log binari? Con lo strumento di lettura dei registri, che non è sui server di produzione! O lo è, ma cara, abbiamo aggiunto un nuovo campo e questo è il vecchio lettore. Non abbiamo provato questo? Sì, ma nessuno l'ha installato qui. Nel frattempo, lo schermo si sta accendendo con gli utenti che eseguono il ping.
O forse questa non è la tua app, ma stai facendo supporto 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 fatto qualche tipo di trasferimento non binario? O lo strumento di lettura dei log è incasinato?
In breve, gli strumenti di lettura del testo sono multipiattaforma e ubiquitaria, ei log sono spesso longevi e talvolta devono essere letti in fretta . Se inventi un formato binario, 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 logging raggiunge un compromesso: mantenere i log correnti leggibili e presenti e comprimere quelli più vecchi. Ciò significa che si ottiene il vantaggio della compressione, tanto più che un formato binario non riduce i messaggi di registro. Allo stesso tempo, puoi usare meno e grep e così via.
Quindi, quali possibili benefici potrebbero derivare dall'uso di binari? Una piccola quantità di efficienza nello spazio - sempre meno importante. Meno scritture (o più piccole)? Beh, forse - in realtà, il numero di scritture si riferirà al numero di commit del disco, quindi se le linee di log sono significativamente più piccole del blocco del disco, allora un SSD assegnerebbe sempre nuovi blocchi. Quindi, il binario è una scelta appropriata se:
- stai scrivendo enormi quantità di dati strutturati
- i log devono essere creati in modo particolarmente rapido
- è improbabile che sia necessario analizzarli in "condizioni di supporto"
ma sembra meno simile alla registrazione dell'applicazione; questi sono file di output o record di attività. Inserirli in un file è probabilmente solo ad un passo dal loro inserimento in un database.
Modifica
Penso che qui ci sia una confusione generale tra "registri di programma" (come per i quadri di registrazione) rispetto a "record" (come nei registri di accesso, nei record di accesso ecc.). Sospetto che la domanda si riferisca più da vicino a quest'ultima, e in tal caso il problema è molto meno definito. È perfettamente accettabile che un registro di messaggi o di attività sia in un formato compatto, soprattutto perché è probabile che sia ben definito e utilizzato per l'analisi anziché per la risoluzione dei problemi. Gli strumenti che fanno questo includono tcpdump
e il sistema Unix monitora sar
. I registri del programma, d'altro canto, tendono ad essere molto più ad hoc.