Je me request simplement pourquoi y a-t-il autant de files journaux dans un système Linux typique? Ne serait-il pas préférable d'avoir une seule fonction api système pour la journalisation et une table consolidée pour save toutes les inputs de journal de toutes les applications?
Cela fait partie de la philosophie Unix . L'idée est que les files text sont libres de locking du programme et tout le monde peut utiliser la technique qu'ils préfèrent. Pour aller plus loin, les files plats sont souvent utilisés, par opposition aux langages de balisage comme XML (même si j'ai vu des programmes stockant des choses au format XML).
En google, j'ai trouvé cette belle écriture sur le text brut, avec des commentaires sur la philosophie Unix.
L'utilisation de files text simples présente l'avantage de ne nécessiter aucun outil spécifique à la database pour get vos inputs de journal.
Vous pouvez les parsingr avec grep si vous le souhaitez, vous pouvez les ouvrir avec votre téléavertisseur préféré et les traiter dans votre langage de script favori comme Perl, Python, etc., sans avoir besoin de bibliothèques supplémentaires.
Sur un système Unix, vous avez déjà une sorte de "API Log Log". Il s'appelle syslog. Syslog n'est pas vraiment une API mais c'est une norme pour la journalisation des messages. Le nom représente le protocole réseau et la bibliothèque et le démon derrière.
La configuration par défaut de la plupart des systèmes est un démon syslog qui écoute les messages locaux.
Le démon accepte les messages et effectue la journalisation. Il existe plusieurs implémentations différentes de démons syslog pour tous les types de plates-forms et il est également possible de consigner vos messages dans une database.
C'est à toi de decider.
Je me request simplement pourquoi y a-t-il autant de files journaux dans un système Linux typique?
Les différents files journaux contiennent des informations différentes (bien qu'il existe généralement une certaine duplication). Ils ont souvent des caractéristiques différentes: différentes stratégies de rotation et de rétention, différentes permissions, etc. Le démon syslog prend soin de les écrire; vous pouvez voir ses parameters dans /etc/syslog.conf
ou /etc/syslog-ng.conf
.
Ne serait-il pas préférable d'avoir une seule fonction api système pour la journalisation
Celui-ci est une bonne idée. Appelons cela syslog . Son travail consiste à envoyer les inputs de journal au démon syslog.
et une table consolidée pour save toutes les inputs de journal de toutes les applications?
Maintenant c'est toute une boîte de Pandore. Vous semblez supposer la présence d'un moteur de database, probablement une database relationnelle, probablement celle que vous pouvez interroger en SQL. Mais Unix est plus ancien que SQL, et il y a de très bonnes raisons pour lesquelles il n'a pas adopté SQL comme composant standard. Sous Unix, la database est le système de files. Ce n'est pas une database relationnelle, c'est simple . Ses inputs ne sont pas des lignes, mais des files simples , de preference du text, de preference avec un format simple. Par exemple, les files journaux sont des files text, avec une input par ligne, contenant la date, le nom de l'ordinateur, le programme d'origine et le text d'input. L'utilisation d'une database relationnelle aurait un certain nombre d'inconvénients:
cat
, grep
, less
aux requêtes SQL. Et permissions de files contre, eh bien, je ne sais pas comment vous gérer cela dans une database relationnelle typique. Si vous voulez vraiment stocker vos journaux système dans une database relationnelle (qui peut avoir de nombreux avantages), consultez rsyslog ( le rlocation à venir pour syslog ), qui permet d'écrire des journaux système dans une database MySQL , Postgres ou Oracle .
Cela rendrait les choses comme 'tail -f /var/log/apache/access.log' impossible.
Pourquoi pensez-vous qu'il serait préférable de tout mettre dans un seul file?