MINIFICPP-1063 - Log directory location should be configurable
Signed-off-by: Arpad Boda <aboda@apache.org>
This closes #675
diff --git a/conf/minifi-log.properties b/conf/minifi-log.properties
index 55d07c3..7105ced 100644
--- a/conf/minifi-log.properties
+++ b/conf/minifi-log.properties
@@ -26,6 +26,7 @@
#spdlog.pattern=[%D %H:%M:%S.%e] [%L] %v
appender.rolling=rollingappender
+#appender.rolling.directory=${MINIFI_HOME}/logs
appender.rolling.file_name=minifi-app.log
appender.rolling.max_files=3
appender.rolling.max_file_size=5242880
diff --git a/libminifi/src/core/logging/LoggerConfiguration.cpp b/libminifi/src/core/logging/LoggerConfiguration.cpp
index 0997f09..55b9d90 100644
--- a/libminifi/src/core/logging/LoggerConfiguration.cpp
+++ b/libminifi/src/core/logging/LoggerConfiguration.cpp
@@ -30,6 +30,7 @@
#include "core/Core.h"
#include "utils/StringUtils.h"
#include "utils/ClassUtils.h"
+#include "utils/file/FileUtils.h"
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_sinks.h"
@@ -135,32 +136,23 @@
if ("nullappender" == appender_type || "null appender" == appender_type || "null" == appender_type) {
sink_map[appender_name] = std::make_shared<spdlog::sinks::null_sink_st>();
} else if ("rollingappender" == appender_type || "rolling appender" == appender_type || "rolling" == appender_type) {
- std::string file_name = "";
+ std::string file_name;
if (!logger_properties->get(appender_key + ".file_name", file_name)) {
file_name = "minifi-app.log";
}
- std::string directory = "";
- directory = logger_properties->getHome();
- if (!directory.empty()) {
- // Create the log directory if needed
- directory += "/logs";
-#ifdef WIN32
- struct _stat logDirStat;
- if (_stat(directory.c_str(), &logDirStat) != 0) {
- if (_mkdir(directory.c_str()) == -1) {
- exit(1);
- }
-#else
- struct stat logDirStat;
- if (stat(directory.c_str(), &logDirStat) != 0 || !S_ISDIR(logDirStat.st_mode)) {
- if (mkdir(directory.c_str(), 0777) == -1) {
- exit(1);
- }
-#endif
- }
- file_name = directory + "/" + file_name;
+ std::string directory;
+ if (!logger_properties->get(appender_key + ".directory", directory)) {
+ // The below part assumes logger_properties->getHome() is existing
+ // Cause minifiHome must be set at MiNiFiMain.cpp?
+ directory = logger_properties->getHome() + utils::file::FileUtils::get_separator() + "logs";
}
+ if (utils::file::FileUtils::create_dir(directory) == -1) {
+ std::cerr << directory << " cannot be created\n";
+ exit(1);
+ }
+ file_name = directory + utils::file::FileUtils::get_separator() + file_name;
+
int max_files = 3;
std::string max_files_str = "";
if (logger_properties->get(appender_key + ".max_files", max_files_str)) {