背景
在 Linux 系统上,应用程序日志 https://help.ubuntu.com/community/LinuxLogFiles#Application_Logs存在于子目录中/var/log
,其所有者为root/root
并且在我的系统上拥有 755 权限。例如,我看到/var/log/mysql
and /var/log/samba
.
Question
如果我想要一个myapp能够写入/var/log/myapp
, 是什么规范方式在 C/C++ 中完成这个?
Thoughts
我必须做一些疯狂的事情吗setuid root
如果我不想sudo a_setup_script.sh
?请注意,我知道syslog
例程,但它们不足以满足我的需求(我需要记录更多信息,分为不同的文件,因此需要子目录)。
我是否需要研究 Ubuntu 打包(设置目录)和直接文件 IO 到子目录(通过myapp)?
我想尽可能地遵循标准。
Addendum
我忘了提及,myapp实际上是一个守护进程(一个监听客户端的服务器),所以拥有一个也不错myapp_user它实际上运行/启动该进程。
ANSWER
对于 Ubuntu,最好的解决方案似乎是rsyslog
,一个强大的、现代的替代品syslog
。它将根据需要生成文件/目录,它具有内置语言,可以灵活路由syslog
条目,它使用简单、古老的syslog
C/C++ 级别的 API。要存储路由信息,您可以在 C/C++ 中定义自己的文本消息编码,并结合适当的rsyslog.conf
来处理解码。
不不不不。没有适合这种东西的衣服。这些日志由称为“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)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)