11

背景

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

问题

如果我希望myapp能够写入 a /var/log/myapp,那么在 C/C++ 中完成此操作的规范方法是什么?

想法

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

我是否需要研究 Ubuntu 打包(设置目录)和将文件 IO 定向到子目录(通过myapp)的组合?

我想尽可能地遵循标准。

附录

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

回答

对于 Ubuntu,最好的解决方案似乎rsyslogsyslog. 它将根据需要生成文件/目录,它具有用于灵活路由条目的内置语言,并且在 C/C++ 级别syslog使用简单的旧API。syslog要存储路由信息,您可以在 C/C++ 中定义自己的文本消息编码,并结合适当rsyslog.conf的解码处理。

4

1 回答 1

11

不不不不。这样的东西没有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)。

于 2013-05-28T19:53:18.653 回答