2013-05-28 2 views
7

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

В системах Linux, Application Logs существуют в подкаталогах /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 (для настройки каталога) и прямого ввода файла IO в подкаталог (по myapp)?

Я хотел бы как можно больше соблюдать стандарты.

Добавление

Я забыл упомянуть, MyApp на самом деле демон, процессы (сервер, который слушает клиентов), так что не было бы так плохо, чтобы иметь myapp_user который на самом деле работает/запускает процесс.

ОТВЕТ

Для Ubuntu, лучшее решение, как представляется, rsyslog, мощная, современная замена syslog. Он будет генерировать файлы/каталоги по мере необходимости, он имеет встроенный язык для гибкой маршрутизации записей syslog и использует простой старый syslog API на уровне C/C++. Чтобы сохранить информацию о маршрутизации, вы можете определить свою собственную кодировку текстового сообщения в C/C++ в сочетании с надлежащим rsyslog.conf для обработки декодирования.

ответ

8

Нет, нет, нет. Никаких претензий к подобным вещам. Эти журналы управляются с помощью процесса, известного как «системный журнал» и есть API для отправки сообщений в этом регистраторе:

void openlog(const char *ident, int option, int facility); 
    void syslog(int priority, const char *format, ...); 
    void closelog(void); 

Или вы можете ввести «человек системный журнал» в командной строке и получить всю информацию: -)

Обновление: вам потребуется разрешение на редактирование файла конфигурации syslog для отправки сообщения в отдельный файл журнала, иначе они попадут в местоположение по умолчанию (вероятно,/var/log/syslog).

+0

Вы уверены, что можете использовать это с подкаталогами? внимательно прочитайте мой ОПТ - если я сброшу все мои вещи в '/ var/log/syslog', это сделает этот файл бесполезным (есть так много всего). – kfmfe04

+0

@ kfmfe04 Да. Проверьте обновление.Вам нужно будет настроить syslog для отправки сообщений _your_ в файл _your_. Например: 'news.crit /var/log/news/news.crit news.err/var/log/news/news.err' – user2116939

+0

@ kfmfe04 извините за несколько изменений. Комментарии немного болезненны. :( – user2116939