Логи интересной мне программы по-умолчанию идут в /var/log/messages, но я хочу это изменить, т.к. в этот файл идёт много всего. Кроме того, туда попадают не все логи, а только определённого в конфиге syslog-а типа.
Направить логи от определённой программы в другой файл:
destination dest_myprog { file("/var/log/myprog.log"); };
filter filter_myprog { program("myprog"); };
log { source(s_sys); filter(filter_myprog); destination(dest_myprog); };
Направить логи от определённой программы на другой syslog-сервер:
destination dest_myserver { udp("10.1.1.1" port(514)); };
filter filter_myprog { program("myprog"); };
log { source(s_sys); filter(filter_myprog); destination(dest_myserver); };
Ну и комбинированный вариант — направить логи от определённой программы и в отдельный файл, и на другой syslog-сервер:
destination dest_myprog { file("/var/log/myprog.log"); };
destination dest_myserver { udp("10.1.1.1" port(514)); };
filter filter_myprog { program("myprog"); };
log { source(s_sys); filter(filter_myprog); destination(dest_myprog); destination(dest_myserver); };
Если те же логи в файле messages уже не нужны, то добавим их исключение в существующий фильтр, который используется для сохранения логов в этот файл:
filter f_default { level(info..emerg) and
not (facility(mail)
or facility(authpriv)
or facility(cron))
and not program("myprog");
};
Конечно после изменений надо дать syslog-ng команду перечитать конфиг:
systemctl reload syslog-ng