I just wonder why are there so many log files in a typical Linux system?
Os diferentes arquivos de log contêm informações diferentes (embora normalmente haja alguma duplicação). Eles geralmente têm características diferentes: diferentes políticas de rotação e retenção, diferentes permissões, etc. O daemon syslog cuida de escrevê-las; você pode ver suas configurações em /etc/syslog.conf
ou /etc/syslog-ng.conf
.
Wouldn't it be a better idea to have one system api function for logging
Este é uma boa ideia. Vamos chamá-lo de syslog . Sua tarefa é enviar as entradas de log para o daemon syslog.
and one consolidated table to save all the log entries from all the applications?
Agora, isso é uma lata inteira de worms. Você parece estar assumindo a presença de um mecanismo de banco de dados, provavelmente um banco de dados relacional, provavelmente um que você pode consultar no SQL. Mas o Unix é mais antigo que o SQL, e há boas razões porque ele não adotou o SQL como um componente padrão. No Unix, o banco de dados é o sistema de arquivos. Não é um banco de dados relacional, é um simples . Suas entradas não são linhas, mas arquivos simples , preferencialmente texto, preferencialmente com um formato simples. Por exemplo, os arquivos de log são arquivos de texto, com uma entrada por linha, contendo a data, o nome da máquina, o programa de origem e o texto da entrada. Usar um banco de dados relacional teria várias desvantagens:
- O que você faz se o banco de dados não estiver funcionando? (O sistema de arquivos é um componente fundamental (e já mencionei que é muito mais simples que um banco de dados relacional?); O daemon syslog é um componente simples que faz um trabalho (um recurso comum no projeto Unix) e espera-se que o faça bem e de forma confiável.)
- Como você registra as operações do banco de dados? (Ok, através do próprio banco de dados - depois que todos os logs contêm entradas do kernel e do daemon syslog - mas, novamente, um banco de dados muito mais complexo torna isso mais difícil e menos confiável).
- Como você acessa as entradas de log? Compare a simplicidade de
cat
, grep
, less
com consultas SQL. E as permissões de arquivo contra, bem, eu não sei como você lidaria com isso em um banco de dados relacional típico.
- Instalações multisservidor não armazenam seus registros localmente, eles usam o recurso de registro remoto que foi construído no daemon syslog desde o início do Unix. Isso é fácil de implementar com a arquitetura de registro unix; você não pode executar um banco de dados replicado com esse orçamento de complexidade.