背景
在Linux系统上, 应用程序日志存在于/var/log
子目录中,该root/root
由root/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)结束。