Risposte:
Fa parte della filosofia Unix . L'idea è che i file di testo siano liberi dal blocco del programma e che tutti possano usare qualunque tecnica preferiscano. Per fare ciò, vengono spesso utilizzati file flat, al contrario di linguaggi di markup come XML (anche se ho visto programmi che memorizzano anche cose in formato XML).
Nel googling ho trovato questo bel commento sul testo in chiaro, con commenti sulla filosofia Unix.
L'uso di semplici file di testo ha il vantaggio di non aver bisogno di strumenti specifici del database per ottenere le voci del registro.
Puoi analizzarli con grep se vuoi, puoi aprirli con il tuo cercapersone preferito e puoi elaborarli nel tuo linguaggio di scripting preferito come Perl, Python, ecc. Senza la necessità di ulteriori librerie.
Su un sistema Unix hai già una sorta di "API del registro di sistema". Si chiama syslog. Syslog non è in realtà un'API ma è uno standard per la registrazione dei messaggi. Il nome indica il protocollo di rete e la libreria e il demone dietro di esso.
La configurazione predefinita della maggior parte dei sistemi è un demone syslog che ascolta i messaggi locali.
Il demone accetta i messaggi ed esegue la registrazione. Esistono diverse implementazioni di demoni syslog per tutti i tipi di piattaforme ed è anche possibile registrare i tuoi messaggi in un database.
Spetta a voi.
Mi chiedo solo perché ci sono così tanti file di registro in un tipico sistema Linux?
I diversi file di registro contengono informazioni diverse (sebbene in genere vi siano duplicazioni). Spesso hanno caratteristiche diverse: diverse politiche di rotazione e conservazione, diverse autorizzazioni, ecc. Il demone syslog si occupa di scriverle; puoi vedere le sue impostazioni in /etc/syslog.conf
o /etc/syslog-ng.conf
.
Non sarebbe un'idea migliore avere una funzione API di sistema per la registrazione
Questa è una buona idea. Chiamiamolo syslog . Il suo compito è inviare le voci di registro al demone syslog.
e una tabella consolidata per salvare tutte le voci di registro da tutte le applicazioni?
Questa è un'intera lattina di vermi. Sembra che tu stia presupponendo la presenza di un motore di database, probabilmente un database relazionale, probabilmente uno che puoi interrogare in SQL. Ma Unix è più vecchio di SQL e ci sono ottime ragioni per cui non ha adottato SQL come componente standard. Sotto Unix, il database è il filesystem. Non è un database relazionale, è semplice . Le sue voci non sono righe, ma file semplici , preferibilmente di testo, preferibilmente con un formato semplice. Ad esempio, i file di registro sono file di testo, con una voce per riga, contenenti la data, il nome della macchina, il programma di origine e il testo della voce. L'uso di un database relazionale avrebbe una serie di aspetti negativi:
cat
, grep
, less
contro le query SQL. E i permessi sui file, beh, non so come lo gestiresti in un tipico database relazionale.Se desideri davvero archiviare i log di sistema in un database relazionale (che può avere molti vantaggi), dai un'occhiata a rsyslog ( La sostituzione emergente per syslog ), che può scrivere i log di sistema in un database MySQL , Postgres o Oracle .
Ciò renderebbe impossibili cose come 'tail -f /var/log/apache/access.log'.
Perché pensi che sarebbe meglio mettere tutto in un file?
grep '\[apache\]' | tail -f /dev/stdin
- ma con server di accesso per utente (quando l'utente non ha accesso al registro di altri utenti).
.log
e.conf
come identificatori?