2013-05-28 79 views
7

背景如何編寫寫入/ var/log/myapp目錄的C/C++應用程序?

在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其實際運行/開始這個過程。

ANSWER

對於Ubuntu的,最好的解決辦法似乎是rsyslog,一個強大的,現代化的替代syslog。它將根據需要生成文件/目錄,它具有用於靈活路由syslog條目的內置語言,並且它在C/C++級別使用簡單的舊的syslog API。要存儲路由信息,您可以在C/C++中定義自己的文本消息編碼,並配合正確的rsyslog.conf來處理解碼。

回答

8

不,不,不,不。沒有這樣的東西suid。這些日誌由被稱爲「系統日誌」並沒有將消息發送到該記錄器的API過程進行管理:

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

或者你可以在命令行上的「人的syslog」,並得到所有的信息: - )

更新:您將需要權限來編輯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

相關問題