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

Может ли rsyslog создать каталог?

Установка

У меня это в моем /etc/rsyslog.conf:

$template local1DynFile,"/path/to/my/log/%programname%.log.%NOW%
$template local1LogFormat,"%msg:2:$:%\n"

*,*;auth,authpriv,local0,local1.none          ~/var/log/syslog

local1.*                                      ?local1DynFile;local1LogFormat

Тогда у меня есть следующий скрипт Python (test.py):

import logging
import logging.handlers

logger = logging.getLogger('pxet.foo')
logger.addHandler(logging.handlers.SysLogHandler(address='/run/systemd/journal/syslog', facility='local1'))
logger.handlers[0].setLevel(logging.DEBUG)
logger.setLevel(logging.DEBUG)

logger.debug('test cockroach is a bug')

Эта проблема

Если я сделаю следующее:

rm -rf /path/to/my/log
systemctl restart rsyslog
python test.py

Я не получаю сообщения журнала. Тем не мение:

mkdir -p /path/to/my/log
python test.py

И все работает.

Вопрос

Могу ли я сделать rsyslog создавать каталоги, если они не существуют, или мне придется это делать самому?

Документация (http://www.rsyslog.com/doc/v8-stable/configuration/action/index.html#omfile-specific-configuration-statements) говорит, что rsyslog имеет $CreateDirs унаследованная опция конфигурации, позволяющая контролировать, создавать ли каталоги по мере необходимости. (Есть вариант с аналогичным названием CreateDirs для следующего формата конфигурации, но в вашем примере используется устаревший формат.) Итак, попробуйте строку:

$CreateDirs on

прямо перед твоим

local1.* ?local1DynFile;local1LogFormat

линия.