Фон
В системах Linux, Журналы приложений существуют в подкаталогах /var/log
, который принадлежит root/root
и имеет 755 разрешений в моей системе. Например, я вижу /var/log/mysql
а также /var/log/samba
,
Вопрос
Если я хочу MyApp чтобы иметь возможность писать в /var/log/myapp
, что канонический путь достижения этого в C / C ++?
мысли
Должен ли я сделать что-то сумасшедшее, как setuid root
если я не хочу sudo a_setup_script.sh
? Обратите внимание, что я знаю о syslog
подпрограмм, но их недостаточно для моих нужд (мне нужно регистрировать гораздо больше информации, разделенной на разные файлы, отсюда и необходимость в подкаталоге).
Нужно ли искать комбинацию пакетов Ubuntu (для настройки каталога) и прямого ввода-вывода файлов в подкаталог ( MyApp)?
Я хотел бы максимально придерживаться стандартов.
добавление
Я забыл упомянуть, MyApp на самом деле это процессы-демоны (сервер, который слушает клиентов), поэтому было бы неплохо иметь myapp_user который фактически запускает / запускает процесс.
ОТВЕТ
Для Ubuntu лучшим решением является rsyslog
, мощная, современная замена syslog
, Он будет генерировать файлы / каталоги по мере необходимости, он имеет встроенный язык для гибкой маршрутизации syslog
записи, и он использует простые, старые syslog
API на уровне C / C ++. Чтобы хранить информацию о маршрутизации, вы можете определить свою собственную кодировку текстового сообщения в C / C ++ в сочетании с надлежащей rsyslog.conf
обрабатывать декодирование.
Нет нет Нет Нет. Нет suid для таких вещей. Эти журналы управляются процессом, известным как «системный журнал», и существует API для отправки сообщений этому регистратору:
void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);
Или вы можете набрать ‘man syslog’ в командной строке и получить всю информацию 🙂
Обновление: вам потребуются разрешения на редактирование файла конфигурации системного журнала для отправки сообщения в отдельный файл журнала, в противном случае они окажутся в расположении по умолчанию (возможно, / var / log / syslog).
Других решений пока нет …