Comment écrire une application C / C ++ qui écrit dans un répertoire / var / log / myapp?

Contexte

Sur les systèmes Linux, les journaux d’application existent dans des sous-répertoires de /var/log , qui appartiennent à root/root et disposent de 755 permissions sur mon système. Par exemple, je vois /var/log/mysql et /var/log/samba .

Question

Si je veux qu’un myapp puisse écrire dans /var/log/myapp , quelle est la manière canonique de réaliser cela en C / C ++?

Pensées

Dois-je faire quelque chose de fou comme setuid root si je ne veux pas sudo a_setup_script.sh ? Notez que je suis au courant des routines syslog , mais elles sont insuffisantes pour mes besoins (j’ai besoin de beaucoup plus d’informations, séparées en différents fichiers, d’où la nécessité du sous-répertoire).

Dois-je regarder une combinaison de packaging Ubuntu (pour configurer le répertoire) et diriger le fichier IO dans le sous-répertoire (par myapp )?

Je voudrais suivre les normes autant que possible.

Addenda

J’ai oublié de mentionner que myapp est en fait un processus de démon (un serveur qui écoute les clients), il ne serait donc pas si mal d’avoir un myapp_user qui exécute / démarre le processus.

RÉPONDRE

Pour Ubuntu, la meilleure solution semble être rsyslog , un remplacement puissant et moderne pour syslog . Il générera des fichiers / répertoires si nécessaire, il aura un langage intégré pour le routage flexible des entrées syslog , et il utilisera l’ancienne et simple API syslog au niveau C / C ++. Pour stocker les informations de routage, vous pouvez définir votre propre encodage du message texte en C / C ++, en conjonction avec un rsyslog.conf approprié pour gérer le décodage.

Non Non Non Non. Pas de suid pour de telles choses. Ces journaux sont gérés par un processus appelé “syslog” et il existe une API pour envoyer des messages à ce consignateur:

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

Ou vous pouvez taper “man syslog” sur la ligne de commande et obtenir toutes les informations 🙂

Mise à jour: vous aurez besoin d’permissions pour modifier le fichier de configuration de syslog afin d’envoyer un message à un fichier journal distinct, sinon elles se retrouveront dans l’emplacement par défaut (probablement / var / log / syslog).