Logger:check and create log file parent directory
This commit adds changes in the LogFileHandler interface to check and
create parent directory for given log file path. Log file directory may
not exist when an object of SyncFileLogger or AsyncFileLogger is created
, hence the LogFileHandler interface needs to create the directory if
needed.
Change-Id: I47dfb410bdc8417795e0a9b48b44dffeef3db4e1
Signed-off-by: Souvik Roy <souvikroyofficial10@gmail.com>
diff --git a/vpd-manager/src/logger.cpp b/vpd-manager/src/logger.cpp
index 8411aa2..cbf385a 100644
--- a/vpd-manager/src/logger.cpp
+++ b/vpd-manager/src/logger.cpp
@@ -288,6 +288,37 @@
l_ec.message());
}
+ if (!l_logFileExists)
+ {
+ l_ec.clear();
+
+ // check if the parent directory of the file exists
+ if (!std::filesystem::exists(m_filePath.parent_path(), l_ec))
+ {
+ if (l_ec)
+ {
+ Logger::getLoggerInstance()->logMessage(
+ "Failed to check if log file parent directory [" +
+ m_filePath.parent_path().string() +
+ "] exists. Error: " + l_ec.message());
+
+ l_ec.clear();
+ }
+
+ // create parent directories
+ if (!std::filesystem::create_directories(m_filePath.parent_path(),
+ l_ec))
+ {
+ if (l_ec)
+ {
+ throw std::runtime_error(
+ "Failed to create parent directory of log file path:[" +
+ m_filePath.string() + "]. Error: " + l_ec.message());
+ }
+ }
+ }
+ }
+
// open the file in append mode
m_fileStream.open(m_filePath, std::ios::out | std::ios::ate);
// enable exception mask to throw on badbit and failbit