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

How to write an C/C++ application that writes to a /var/log/myapp directory?

本文关键字:myapp log var 应用程序 C++ 何编写 一个      更新时间:2023-10-16

背景

在Linux系统上,应用程序日志存在于/var/log的子目录中,CCD_1归root/root所有,在我的系统上具有755权限。例如,我看到了/var/log/mysql/var/log/samba

问题

如果我希望myapp能够写入/var/log/myapp,那么在C/C++中实现这一点的规范方式是什么?

想法

如果我不想sudo a_setup_script.sh,我必须做一些疯狂的事情吗?请注意,我知道syslog例程,但它们不足以满足我的需求(我需要记录更多的信息,并将其分隔到不同的文件中,因此需要子目录(。

我需要研究Ubuntu打包(设置目录(和将文件IO直接导入子目录(通过myapp(的组合吗?

我希望尽可能地遵循标准。

附录

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

答案

对于Ubuntu来说,最好的解决方案似乎是rsyslog,它是syslog的强大而现代的替代品。它将根据需要生成文件/目录,它具有用于灵活路由syslog条目的内置语言,并在C/C++级别使用简单、旧的syslog 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(。