Мне просто интересно, почему в типичной системе Linux так много файлов журналов? Не лучше ли было бы иметь одну системную API-функцию для ведения журнала и одну консолидированную таблицу для сохранения всех записей журнала из всех приложений?
8
.log
и в.conf
качестве идентификаторов?Ответы:
Это часть философии Unix . Идея состоит в том, что текстовые файлы свободны от блокировки программы, и каждый может использовать любую технику, которую он предпочитает. Чтобы продвинуться дальше, часто используются плоские файлы, в отличие от языков разметки, таких как XML (хотя я видел программы, хранящие вещи также в формате XML).
В гугле я нашел эту хорошую заметку о простом тексте с комментариями о философии Unix.
источник
Преимущество использования простых текстовых файлов заключается в том, что вам не нужны специальные инструменты для базы данных, чтобы получить записи в журнале.
Вы можете анализировать их с помощью grep, если хотите, можете открывать их с помощью своего любимого пейджера и обрабатывать их на своем любимом языке сценариев, таком как Perl, Python и т. Д., Без необходимости в дополнительных библиотеках.
В системе Unix у вас уже есть своего рода «API системного журнала». Это называется системный журнал. Системный журнал на самом деле не API, но это стандарт для регистрации сообщений. Название обозначает сетевой протокол, а также библиотеку и демон, стоящие за ним.
В большинстве систем по умолчанию используется демон системного журнала, который прослушивает локальные сообщения.
Демон принимает сообщения и регистрирует их. Существует несколько различных реализаций демонов системного журнала для всех видов платформ, а также возможно записывать ваши сообщения в базу данных.
Это тебе решать.
источник
Различные файлы журналов содержат разную информацию (хотя обычно есть некоторое дублирование). Они часто имеют разные характеристики: разные политики ротации и хранения, разные разрешения и т. Д. Демон системного журнала заботится о их написании; вы можете увидеть его настройки в
/etc/syslog.conf
или/etc/syslog-ng.conf
.Это хорошая идея. Давайте назовем это системным журналом . Его задача - отправлять записи журнала демону syslog.
Теперь это целая банка червей. Похоже, вы предполагаете наличие механизма базы данных, возможно, реляционной базы данных, возможно, той, которую вы можете запрашивать в SQL. Но Unix старше SQL, и есть очень веские причины, по которым он не принял SQL в качестве стандартного компонента. Под Unix база данных является файловой системой. Это не реляционная база данных, это простая . Его записи - это не строки, а простые файлы, предпочтительно текст, предпочтительно в простом формате. Например, файлы журнала - это текстовые файлы, по одной записи в строке, содержащие дату, имя компьютера, исходную программу и текст записи. Использование реляционной базы данных будет иметь ряд недостатков:
cat
,grep
,less
против запросов SQL. И права доступа к файлам, ну, я не знаю, как бы вы справились с этим в типичной реляционной базе данных.источник
Если вы действительно хотите хранить системные журналы в реляционной базе данных (что может иметь много преимуществ), проверьте rsyslog ( готовящаяся замена для syslog ), который может записывать системные журналы в базу данных MySQL , Postgres или Oracle .
источник
Это сделает невозможным такие вещи, как tail -f /var/log/apache/access.log.
Как вы думаете, почему было бы лучше поместить все в один файл?
источник
grep '\[apache\]' | tail -f /dev/stdin
- но наличие входа на сервер для каждого пользователя (когда пользователь не имеет доступа к журналу другого пользователя).