Jawaban:
Itu bagian dari filosofi Unix . Idenya adalah bahwa file teks bebas dari penguncian program dan semua orang dapat menggunakan teknik apa pun yang mereka inginkan. Untuk mengambil ini lebih lanjut, file flat sering digunakan, sebagai lawan dari bahasa markup seperti XML (walaupun saya telah melihat program menyimpan hal-hal dalam format XML juga).
Dalam googling saya menemukan tulisan yang bagus tentang teks biasa, dengan komentar tentang filosofi Unix.
Menggunakan file teks sederhana memiliki keuntungan bahwa Anda tidak memerlukan alat khusus basis data untuk mendapatkan entri log Anda.
Anda dapat menganalisisnya dengan grep jika Anda suka, Anda dapat membukanya dengan pager favorit Anda dan Anda dapat memprosesnya dalam bahasa skrip favorit Anda seperti Perl, Python, dll. Tanpa memerlukan perpustakaan tambahan.
Pada sistem Unix Anda sudah memiliki semacam "log sistem API". Ini disebut syslog. Syslog sebenarnya bukan API tetapi standar untuk mencatat pesan. Nama singkatan protokol jaringan dan perpustakaan dan daemon di belakangnya.
Konfigurasi default kebanyakan sistem adalah daemon syslog yang mendengarkan pesan lokal.
Daemon menerima pesan dan melakukan logging. Ada beberapa implementasi daemon syslog yang berbeda untuk semua jenis platform dan Anda juga dapat mencatat pesan Anda ke basis data.
Ini terserah kamu.
Saya hanya ingin tahu mengapa ada begitu banyak file log di sistem Linux yang khas?
File log yang berbeda berisi informasi yang berbeda (walaupun biasanya ada beberapa duplikasi). Mereka sering memiliki karakteristik yang berbeda: kebijakan rotasi dan penyimpanan yang berbeda, izin yang berbeda, dll. Daemon syslog menangani penulisan mereka; Anda dapat melihat pengaturannya di /etc/syslog.confatau /etc/syslog-ng.conf.
Bukankah lebih baik memiliki satu fungsi api sistem untuk logging
Ini ide yang bagus. Sebut saja syslog . Tugasnya adalah mengirim entri log ke daemon syslog.
dan satu tabel terkonsolidasi untuk menyimpan semua entri log dari semua aplikasi?
Nah, itu keseluruhan kaleng cacing. Anda tampaknya mengasumsikan keberadaan mesin basis data, mungkin basis data relasional, mungkin salah satu yang dapat Anda query dalam SQL. Tetapi Unix lebih tua dari SQL, dan ada alasan yang sangat bagus mengapa ia tidak mengadopsi SQL sebagai komponen standar. Di bawah Unix, database adalah sistem file. Ini bukan basis data relasional, ini sederhana . Entrinya bukan baris, tetapi file sederhana , lebih disukai teks, lebih disukai dengan format sederhana. Misalnya, file log adalah file teks, dengan satu entri per baris, yang berisi tanggal, nama mesin, program asal dan teks entri. Menggunakan database relasional akan memiliki sejumlah kelemahan:
cat, grep, lessterhadap query SQL. Dan mengajukan izin, saya tidak tahu bagaimana Anda akan menangani ini dalam database relasional yang khas.Jika Anda benar-benar ingin menyimpan log sistem Anda dalam basis data relasional (yang dapat memiliki banyak keuntungan), periksa rsyslog ( Pengganti yang akan datang untuk syslog ), yang dapat menulis log sistem ke database MySQL , Postgres atau Oracle .
Ini akan membuat hal-hal seperti 'tail -f /var/log/apache/access.log' menjadi tidak mungkin.
Menurut Anda mengapa lebih baik meletakkan semuanya dalam satu file?
grep '\[apache\]' | tail -f /dev/stdin- tetapi memiliki log per-pengguna di server (ketika pengguna tidak memiliki akses ke log pengguna lain).
.logdan.confsebagai pengidentifikasi?