如何编写一个可写入/var/log/myapp目录的C/C++应用程序
How to write an C/C++ application that writes to a /var/log/myapp directory?
背景
在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(。
- 如何用数字处理log(0)
- 安装opencv失败-粘贴CMakeError.log的内容
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- boost日志文件无法创建sample.log文件
- Boost::log只在debian中崩溃
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 设置自定义收集器时不会提升::log尊重关键字::max_size吗?
- 我仍然收到此错误未定义的引用:boost::log::v2_mt_posix::trivial::logger::get
- 增强.log含义和功能
- log in cpp 14 and 17
- constexpr exp, log, pow
- Boost Log的琐碎记录器"lazy evaluation"是如何工作的?
- boost::log 设置"Channel"通道记录器中的属性
- V8 控制台.log不打印
- Boost Log:变量不是"boost::log::v2s_mt_posix::trivial"的
- Math.log是以一种避免log(1 x)的精度的方式实现的
- 如何打印通话函数的行号和文件名而不是log.cpp
- 将代码移动到函数中时,DLL "myApp.exe"中找不到序号错误0xC0000138
- boost.log-如何用附加和旋转配置text_file_backend
- 如何编写一个可写入/var/log/myapp目录的C/C++应用程序