【发布时间】:2013-05-23 21:39:58
【问题描述】:
背景
在 Linux 系统上,Application Logs 存在于 /var/log 的子目录中,该子目录归 root/root 所有,在我的系统上拥有 755 个权限。例如,我看到/var/log/mysql 和/var/log/samba。
问题
如果我希望 myapp 能够写入 /var/log/myapp,那么在 C/C++ 中实现此目的的规范方法是什么?
想法
如果我不想sudo a_setup_script.sh,我是否必须做一些疯狂的事情,比如setuid root?请注意,我知道syslog 例程,但它们不足以满足我的需求(我需要记录更多信息,分成不同的文件,因此需要子目录)。
我是否需要查看 Ubuntu 打包(设置目录)和将文件 IO 定向到子目录(通过 myapp)的组合?
我想尽可能地遵循标准。
附录
我忘了提,myapp 实际上是一个守护进程(一个侦听客户端的服务器),所以拥有一个 myapp_user 实际上并不是那么糟糕运行/启动进程。
回答
对于 Ubuntu,最好的解决方案似乎是 rsyslog,它是 syslog 的强大现代替代品。它将根据需要生成文件/目录,它具有用于灵活路由syslog 条目的内置语言,并且它在C/C++ 级别使用简单、旧的syslog API。要存储路由信息,您可以在 C/C++ 中定义自己的文本消息编码,并结合适当的rsyslog.conf 来处理解码。
【问题讨论】:
标签: c++ linux logging c++11 user-defined-literals