用于 C++ 的 spdlog; what(): 无法打开文件 ~/logs/log.txt 进行写入:没有这样的文件或目录
spdlog for C++; what(): Failed opening file ~/logs/log.txt for writing: No such file or directory
我正在使用 spdlog 在 beaglebone、debian 10 上的 c++ 程序上做一些简单的日志记录。我设置了一个旋转记录器:
auto logger = spdlog::rotating_logger_mt("runtime_log", "~/logs/log.txt", max_size, max_files);
和这个returns错误
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
的目录?
~
是 Bash 中的特殊字符 shell,shorthand 用于主目录。 C++ 程序不知道 ~
。获取主目录的通常方法是使用 std::getenv
函数,例如:
const char* home_dir = std::getenv("HOME");
auto log_path = std::string{home_dir} + "/logs/log.txt";
我建议你也使用 <filesystem>
header 因为它有检查文件和目录是否存在的功能。
我正在使用 spdlog 在 beaglebone、debian 10 上的 c++ 程序上做一些简单的日志记录。我设置了一个旋转记录器:
auto logger = spdlog::rotating_logger_mt("runtime_log", "~/logs/log.txt", max_size, max_files);
和这个returns错误
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
的目录?
~
是 Bash 中的特殊字符 shell,shorthand 用于主目录。 C++ 程序不知道 ~
。获取主目录的通常方法是使用 std::getenv
函数,例如:
const char* home_dir = std::getenv("HOME");
auto log_path = std::string{home_dir} + "/logs/log.txt";
我建议你也使用 <filesystem>
header 因为它有检查文件和目录是否存在的功能。