У меня есть специальное приложение, которое отправляет сообщения в локальный3 системного журнала. Поскольку каждое сообщение, отправляемое этим приложением, начинается с «[myapp]», я написал эту конфигурацию для входа в отдельный файл:
Содержимое /etc/syslog-ng/conf.d/myapp.conf:
filter f_myapp { facility(local3) and match("[myapp]"); };
destination d_myapp {
file("/var/log/myapp/myapp.log" create_dirs(yes));
};
log {
source(s_src);
filter(f_myapp);
destination(d_myapp);
};
И это хорошо работает: сообщения попадают в /var/log/myapp/myapp.log
НО, они также попадают в / var / log / syslog и / var / log / messages
Чтобы этого избежать, мы можем отредактировать /etc/syslog-ng/syslog-ng.conf и добавить «а не фильтр (f_myapp)» для фильтрации f_messages {...} и фильтрации f_syslog3 {...}
Хорошо, но это ручная задача. Допустим, мы хотим автоматизировать настройки журналирования для многих приложений ...
Есть ли способ сделать такое исключение, ничего не меняя в /etc/syslog-ng/syslog-ng.conf, используя только /etc/syslog-ng/conf.d/?
в syslog-ng пути к журналам определяют, что происходит с сообщениями.
По умолчанию каждый путь журнала получает каждое сообщение из источников, включенных в путь журнала, а syslog-ng обрабатывает каждый путь журнала в том порядке, в котором они указаны в файле конфигурации.
Вы можете использовать параметр flags () в пути к журналу, чтобы изменить это поведение (подробности см. флаги журнала syslog-ng).
Чтобы обрабатывать сообщения только по определенному пути журнала, вам необходимо:
используйте последний флаг в пути к журналу
log {
source(s_src);
filter(f_myapp);
destination(d_myapp);
flags(final)
};
Убедитесь, что в вашем файле syslog-ng.conf это первый путь журнала, который обрабатывает это сообщение. У вас, вероятно, есть такая строка в вашем файле конфигурации syslog-ng.conf:
@include "/etc/syslog-ng/conf.d/*.conf"
Убедитесь, что это отображается перед другими путями журналов. (Если у вас есть другие файлы в каталоге conf.d, это может мешать работе других файлов, в этом случае переместите файл myapp.conf в другое место и включите только этот файл вверху.)