Как написать приложение на C / C ++, которое пишет в каталог / var / log / myapp?

Фон

В системах 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 обрабатывать декодирование.

7

Решение

Нет нет Нет Нет. Нет 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).

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]