回答:
単純なテキストファイルを使用すると、ログエントリを取得するためにデータベース固有のツールが不要になるという利点があります。
必要に応じてgrepでそれらを分析したり、お気に入りのポケットベルで開いたり、PerlやPythonなどのお気に入りのスクリプト言語で処理したりできます。追加のライブラリは必要ありません。
Unixシステムでは、すでに「システムログAPI」のようなものがあります。これはsyslogと呼ばれます。Syslogは実際にはAPIではありませんが、メッセージを記録するための標準です。この名前は、ネットワークプロトコルと、その背後にあるライブラリとデーモンを表しています。
ほとんどのシステムのデフォルト設定は、ローカルメッセージをリスンするsyslogデーモンです。
デーモンはメッセージを受け入れ、ロギングを行います。あらゆる種類のプラットフォーム用のsyslogデーモンの実装がいくつかあり、メッセージをデータベースに記録することも可能です。
それはあなた次第です。
なぜ典型的なLinuxシステムにそんなに多くのログファイルがあるのだろう。
異なるログファイルには、異なる情報が含まれています(ただし、通常は重複があります)。多くの場合、それらには異なる特性があります。異なるローテーションおよび保持ポリシー、異なる権限などです。syslogデーモンがそれらの書き込みを処理します。/etc/syslog.confまたはで設定を確認できます/etc/syslog-ng.conf。
ロギング用に1つのシステムAPI関数を用意するのは良い考えではないでしょうか
これは良いアイデアです。それをsyslogと呼びましょう。その仕事は、ログエントリをsyslogデーモンに送信することです。
すべてのアプリケーションからのすべてのログエントリを保存する1つの統合テーブル?
これでワーム全体ができました。データベースエンジン、おそらくリレーショナルデータベース、おそらくSQLでクエリできるものの存在を想定しているようです。しかし、UnixはSQLよりも古く、SQLを標準コンポーネントとして採用していないのには十分な理由があります。Unixでは、データベースはファイルシステムです。これはリレーショナルデータベースではなく、単純なデータベースです。そのエントリは行ではなく、単純なファイル、できればテキスト、できれば単純な形式のテキストです。たとえば、ログファイルはテキストファイルであり、1行に1つのエントリがあり、日付、マシン名、元のプログラム、およびエントリテキストが含まれています。リレーショナルデータベースを使用すると、いくつかの欠点があります。
cat、grep、lessSQLクエリに対して。そして、一般的なリレーショナルデータベースでこれをどのように処理するかはわかりません。システムログをリレーショナルデータベース(多くの利点がある)に保存したい場合は、システムログをMySQL、Postgres、またはOracleデータベースに書き込むことができるrsyslog(syslogの今後の代替品)を確認してください。
これは、「tail -f /var/log/apache/access.log」のようなことを不可能にします。
すべてを1つのファイルに入れる方が良いと思うのはなぜですか?
grep '\[apache\]' | tail -f /dev/stdin-サーバー上にユーザーごとのログがある(ユーザーが他のユーザーのログにアクセスできない場合)。
.logし、.conf識別子として?