From d4aa1fa6db4a157493b804fed428b3b5b06a4e9c Mon Sep 17 00:00:00 2001
From: Olivier BICHLER <olivier.bichler@cea.fr>
Date: Tue, 12 Mar 2024 15:58:49 +0100
Subject: [PATCH] Updated log system to use env vars

---
 include/aidge/utils/Log.hpp |  7 +++++++
 src/utils/Log.cpp           | 34 +++++++++++++++++++++++++++++++---
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/include/aidge/utils/Log.hpp b/include/aidge/utils/Log.hpp
index 8a18bbab3..005232cd5 100644
--- a/include/aidge/utils/Log.hpp
+++ b/include/aidge/utils/Log.hpp
@@ -18,6 +18,8 @@
 #include <fmt/format.h>
 #include <fmt/ranges.h>
 
+#include "aidge/utils/Attributes.hpp"
+
 namespace Aidge {
 /**
  * Aidge logging class, for displaying and file logging of events.
@@ -145,4 +147,9 @@ private:
 };
 }
 
+namespace {
+template <>
+const char *const EnumStrings<Aidge::Log::Level>::data[] = {"Debug", "Info", "Notice", "Warn", "Error", "Fatal"};
+}
+
 #endif //AIDGE_LOG_H_
diff --git a/src/utils/Log.cpp b/src/utils/Log.cpp
index 764980933..4fd38f67c 100644
--- a/src/utils/Log.cpp
+++ b/src/utils/Log.cpp
@@ -12,12 +12,40 @@
 #include "aidge/utils/Log.hpp"
 #include "aidge/utils/ErrorHandling.hpp"
 
+#include <cstdlib>
+
 #include <fmt/color.h>
 #include <fmt/chrono.h>
 
-Aidge::Log::Level Aidge::Log::mConsoleLevel = Info;
-Aidge::Log::Level Aidge::Log::mFileLevel = Debug;
-std::string Aidge::Log::mFileName = "aidge.log";
+Aidge::Log::Level Aidge::Log::mConsoleLevel = []() {
+    const char* logLevel = std::getenv("AIDGE_LOGLEVEL_CONSOLE");
+    if (logLevel != nullptr) {
+        for (std::size_t i = 0; i < size(EnumStrings<Log::Level>::data); ++i) {
+            if (std::string(logLevel) == EnumStrings<Log::Level>::data[i]) {
+                return static_cast<Log::Level>(i);
+            }
+        }
+    }
+    return Info;
+}();
+Aidge::Log::Level Aidge::Log::mFileLevel = []() {
+    const char* logLevel = std::getenv("AIDGE_LOGLEVEL_FILE");
+    if (logLevel != nullptr) {
+        for (std::size_t i = 0; i < size(EnumStrings<Log::Level>::data); ++i) {
+            if (std::string(logLevel) == EnumStrings<Log::Level>::data[i]) {
+                return static_cast<Log::Level>(i);
+            }
+        }
+    }
+    return Debug;
+}();
+std::string Aidge::Log::mFileName = []() {
+    const char* logFile = std::getenv("AIDGE_LOG_FILE");
+    if (logFile != nullptr) {
+        return std::string(logFile);
+    }
+    return std::string();
+}();
 std::unique_ptr<FILE, decltype(&std::fclose)> Aidge::Log::mFile {nullptr, nullptr};
 
 void Aidge::Log::log(Level level, const std::string& msg) {
-- 
GitLab