-1

我正在使用 spdlog 在 beaglebone、debian 10 上的 c++ 程序上进行一些简单的日志记录。我设置了一个旋转记录器:

auto logger = spdlog::rotating_logger_mt("runtime_log", "~/logs/log.txt", max_size, max_files);

这会返回错误

terminate called after throwing an instance of spdlog::spdlog_ex'
  what():  Failed opening file ~/logs/log.txt for writing: No such file or directory
Aborted

我已经确保该目录存在并尝试过chmod -R 776 ~/logs/

drwxrwxrw- 2 user group 4096 Oct 28 09:03 logs
-rwxrwxrw- 1 user group 0 Oct 28 09:03 runtime.log

当给定路径logs/log.txt时,它可以工作。这会将日志文件放入~/project/build/logs

我也试过给出完整的路径/home/user/logs/log.txt。这很好用。

为什么我的程序和 spdlog 无法访问路径下的目录~/logs/log.txt

4

1 回答 1

1

~是 Bash shell 中的特殊字符,主目录的简写。C++ 程序不知道~. 获取主目录的通常方法是使用std::getenv如下函数:

const char* home_dir = std::getenv("HOME");
auto log_path = std::string{home_dir} + "/logs/log.txt";

我建议你也使用<filesystem>header,因为它具有检查文件和目录是否存在的功能。

于 2021-10-29T04:20:41.353 回答