如何编写写入/ var / log / myapp目录的C / C ++应用程序?

背景

在Linux系统上, 应用程序日志存在于/var/log子目录中,该root/rootroot/root拥有,在我的系统上拥有755个权限。 例如,我看到/var/log/mysql/var/log/samba

如果我想让一个myapp能够写入/var/log/myapp ,在C / C ++中完成此操作的规范方式是什么?

思考

如果我不想sudo a_setup_script.sh我必须像setuid root那样做一些疯狂的sudo a_setup_script.sh吗? 请注意,我知道syslog例程,但它们不足以满足我的需要(我需要logging更多的信息,分成不同的文件,因此需要子目录)。

我是否需要查看一下Ubuntu打包(设置目录)和将文件IO直接导入子目录(通过myapp )?

我想尽可能遵循标准。

附录

我忘了提及, myapp实际上是一个守护进程(一个监听客户端的服务器),所以如果有一个myapp_user实际运行/启动进程,那么这个进程并不是那么糟糕。

回答

对于Ubuntu,最好的解决scheme似乎是rsyslog ,这是一个function强大,现代化的syslog替代品。 它将根据需要生成文件/目录,它具有用于灵活路由syslog条目的内置语言,并且在C / C ++级别使用简单的旧syslog API。 要存储路由信息,您可以在C / C ++中定义自己的文本消息编码,并配合正确的rsyslog.conf来处理解码。

不不不不。 没有这样的东西suid。 这些日志由称为“syslog”的进程进行管理,并且有一个API将消息发送给此记录器:

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

或者你可以在命令行上键入'man syslog'并获取所有的信息:-)

更新:你将需要权限编辑syslog的配置文件发送消息到一个单独的日志文件,否则它们将在默认位置(可能是/ var / log / syslog)结束。