Назад | Перейти на главную страницу

Избегайте входа в / var / log / syslog только с помощью /etc/syslog-ng/conf.d/

Как указать системному журналу отправлять журналы пользовательского приложения в отдельный файл, а НЕ в / var / log / syslog БЕЗ изменения /etc/syslog-ng/syslog-ng.conf?

У меня есть специальное приложение, которое отправляет сообщения в локальный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 в другое место и включите только этот файл вверху.)