2013-05-28 14 views
7

TłoJak napisać aplikację C/C++, która zapisuje do katalogu/var/log/myapp?

W systemach Linux Application Logs istnieć w podkatalogach /var/log, który jest własnością root/root i ma 755 uprawnienia na moim systemie. Na przykład widzę /var/log/mysql i /var/log/samba.

Pytanie

Jeśli chcę MojaApl, aby móc pisać na /var/log/myapp, co jest kanoniczny sposób od dokonania tego w C/C++?

Myśli

Czy muszę zrobić coś szalonego jak setuid root jeśli nie chcą sudo a_setup_script.sh? Zauważ, że znam rutyny syslog, ale są one niewystarczające dla moich potrzeb (muszę rejestrować znacznie więcej informacji, rozdzielać je na różne pliki, stąd potrzeba podkatalogu).

Czy muszę przejrzeć kombinację opakowania Ubuntu (aby skonfigurować katalog) i bezpośrednio plik IO w podkatalogu (przez myapp)?

Chciałbym przestrzegać norm tak bardzo, jak to możliwe.

Uzupełnienie

Zapomniałem wspomnieć, MojaApl jest rzeczywiście procesy demon (serwer, który słucha klientów), więc to nie byłoby tak źle mieć myapp_user który rzeczywiście działa/rozpoczyna proces.

ODPOWIEDŹ

dla Ubuntu, najlepszym rozwiązaniem wydaje się być rsyslog, potężny, nowoczesny zamiennik syslog. W razie potrzeby wygeneruje pliki/katalogi, ma wbudowany język do elastycznego trasowania wpisów syslog i wykorzystuje prosty, stary interfejs API syslog na poziomie C/C++. Aby przechowywać informacje o routingu, możesz zdefiniować własne kodowanie wiadomości tekstowej w języku C/C++, w połączeniu z odpowiednim rsyslog.conf, aby obsługiwać dekodowanie.

Odpowiedz

8

Nie, nie, nie, nie. Nie żałuję takich rzeczy. Dzienniki te są zarządzane przez proces znany jako „syslog” i istnieje API do wysyłania wiadomości do tego rejestratora:

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

Albo można wpisać „syslog man” w wierszu poleceń i uzyskać wszystkie informacje: -)

Aktualizacja: będziesz potrzebować uprawnień do edycji pliku konfiguracyjnego syslog, aby wysłać wiadomość do oddzielnego pliku dziennika, w przeciwnym razie znajdą się one w domyślnej lokalizacji (prawdopodobnie/var/log/syslog).

+0

czy jesteś pewien, że możesz go użyć z podkatalogami? przeczytaj uważnie mój OP - jeśli zrzucę wszystkie moje pliki do '/ var/log/syslog', sprawi to, że plik będzie bezużyteczny (jest tak dużo rzeczy). – kfmfe04

+0

@ kfmfe04 Tak. Sprawdź aktualizację.Będziesz musiał skonfigurować syslog, aby wysłać _twoja_ komunikaty do _twoj_ plik. Na przykład: 'news.crit /var/log/news/news.crit news.err/var/log/news/news.err' – user2116939

+0

@ kfmfe04 przepraszam za wiele zmian. Komentarze są trochę bolesne. :( – user2116939

Powiązane problemy