From 1ff95cdbf80a014c526629b4a4f2e2098c71077e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Thu, 10 Apr 2025 15:18:15 -0400
Subject: [PATCH] manager: update log level env variables

Use scoped environment variable names
for custom log levels:
DHTLOGLEVEL -> JAMI_LOG_DHT
SIPLOGLEVEL -> JAMI_LOG_SIP
RING_TLS_LOGLEVEL -> JAMI_LOG_TLS

Change-Id: Ic2dc29413382b5072a7aadb9356eb5b19514674d
---
 src/jamidht/jamiaccount.cpp |  2 +-
 src/manager.cpp             | 87 +++++++++++++------------------------
 src/manager.h               |  2 +-
 3 files changed, 32 insertions(+), 59 deletions(-)

diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index 5e1a407acf..64cca1956f 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -1957,7 +1957,7 @@ JamiAccount::doRegister_()
         context.peerDiscovery = peerDiscovery_;
         context.rng = std::make_unique<std::mt19937_64>(dht::crypto::getDerivedRandomEngine(rand));
 
-        auto dht_log_level = Manager::instance().dhtLogLevel.load();
+        auto dht_log_level = Manager::instance().dhtLogLevel;
         if (dht_log_level > 0) {
             context.logger = Logger::dhtLogger();
         }
diff --git a/src/manager.cpp b/src/manager.cpp
index 40e59764bc..0f2feb42d1 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -190,91 +190,65 @@ check_rename(const std::filesystem::path& old_dir, const std::filesystem::path&
 }
 
 /**
- * Set OpenDHT's log level based on the DHTLOGLEVEL environment variable.
- * DHTLOGLEVEL = 0 minimum logging (=disable)
- * DHTLOGLEVEL = 1 (=ERROR only)
- * DHTLOGLEVEL = 2 (+=WARN)
- * DHTLOGLEVEL = 3 maximum logging (+=DEBUG)
+ * Set OpenDHT's log level based on the JAMI_LOG_DHT environment variable.
+ * JAMI_LOG_DHT = 0 minimum logging (=disable)
+ * JAMI_LOG_DHT = 1 logging enabled
  */
-
-/** Environment variable used to set OpenDHT's logging level */
-static constexpr const char* DHTLOGLEVEL = "DHTLOGLEVEL";
-
-static void
+static unsigned
 setDhtLogLevel()
 {
-    int level = 0;
-    if (auto envvar = getenv(DHTLOGLEVEL)) {
-        level = to_int<int>(envvar, 0);
-        level = std::clamp(level, 0, 3);
-        JAMI_DBG("DHTLOGLEVEL=%u", level);
+    unsigned level = 0;
+    if (auto envvar = getenv("JAMI_LOG_DHT")) {
+        level = to_int<unsigned>(envvar, 0);
+        level = std::clamp(level, 0u, 1u);
     }
-    Manager::instance().dhtLogLevel = level;
+    return level;
 }
 
 /**
- * Set pjsip's log level based on the SIPLOGLEVEL environment variable.
- * SIPLOGLEVEL = 0 minimum logging
- * SIPLOGLEVEL = 6 maximum logging
+ * Set pjsip's log level based on the JAMI_LOG_SIP environment variable.
+ * JAMI_LOG_SIP = 0 minimum logging
+ * JAMI_LOG_SIP = 6 maximum logging
  */
-
-/** Environment variable used to set pjsip's logging level */
-static constexpr const char* SIPLOGLEVEL = "SIPLOGLEVEL";
-
 static void
 setSipLogLevel()
 {
-    char* envvar = getenv(SIPLOGLEVEL);
-
     int level = 0;
-
-    if (envvar != nullptr) {
+    if (auto envvar = getenv("JAMI_LOG_SIP")) {
         level = to_int<int>(envvar, 0);
-
-        // From 0 (min) to 6 (max)
-        level = std::max(0, std::min(level, 6));
+        level = std::clamp(level, 0, 6);
     }
 
     pj_log_set_level(level);
-    pj_log_set_log_func([](int level, const char* data, int /*len*/) {
+    pj_log_set_log_func([](int level, const char* data, int len) {
+        auto msg = std::string_view(data, len);
         if (level < 2)
-            JAMI_ERR() << data;
+            JAMI_ERROR("{}", msg);
         else if (level < 4)
-            JAMI_WARN() << data;
+            JAMI_WARNING("{}", msg);
         else
-            JAMI_DBG() << data;
+            JAMI_LOG("{}", msg);
     });
 }
 
 /**
- * Set gnutls's log level based on the RING_TLS_LOGLEVEL environment variable.
- * RING_TLS_LOGLEVEL = 0 minimum logging (default)
- * RING_TLS_LOGLEVEL = 9 maximum logging
+ * Set gnutls's log level based on the JAMI_LOG_TLS environment variable.
+ * JAMI_LOG_TLS = 0 minimum logging (default)
+ * JAMI_LOG_TLS = 9 maximum logging
  */
-
-static constexpr int RING_TLS_LOGLEVEL = 0;
-
-static void
-tls_print_logs(int level, const char* msg)
-{
-    JAMI_XDBG("[%d]GnuTLS: %s", level, msg);
-}
-
 static void
 setGnuTlsLogLevel()
 {
-    char* envvar = getenv("RING_TLS_LOGLEVEL");
-    int level = RING_TLS_LOGLEVEL;
-
-    if (envvar != nullptr) {
-        level = to_int<int>(envvar);
-
-        // From 0 (min) to 9 (max)
-        level = std::max(0, std::min(level, 9));
+    int level = 0;
+    if (auto envvar = getenv("JAMI_LOG_TLS")) {
+        level = to_int<int>(envvar, 0);
+        level = std::clamp(level, 0, 9);
     }
 
     gnutls_global_set_log_level(level);
-    gnutls_global_set_log_function(tls_print_logs);
+    gnutls_global_set_log_function([](int level, const char* msg) {
+        JAMI_XDBG("[%d]GnuTLS: %s", level, msg);
+    });
 }
 
 //==============================================================================
@@ -789,6 +763,7 @@ Manager::init(const std::filesystem::path& config_file, libjami::InitFlag flags)
 #undef PJSIP_TRY
 
     setGnuTlsLogLevel();
+    dhtLogLevel = setDhtLogLevel();
 
     JAMI_LOG("Using PJSIP version: {:s} for {:s}", pj_get_version(), PJ_OS_NAME);
     JAMI_LOG("Using GnuTLS version: {:s}", gnutls_check_version(nullptr));
@@ -799,8 +774,6 @@ Manager::init(const std::filesystem::path& config_file, libjami::InitFlag flags)
         JAMI_LOG("Using libgit2 version: {:d}.{:d}.{:d}", git2_major, git2_minor, git2_rev);
     }
 
-    setDhtLogLevel();
-
     // Manager can restart without being recreated (Unit tests)
     // So only create the SipLink once
     pimpl_->sipLink_ = std::make_unique<SIPVoIPLink>();
diff --git a/src/manager.h b/src/manager.h
index b68016f48f..d596fa2810 100644
--- a/src/manager.h
+++ b/src/manager.h
@@ -849,7 +849,7 @@ public:
 #endif // ENABLE_VIDEO
     VideoManager& getVideoManager() const;
 
-    std::atomic<unsigned> dhtLogLevel {0}; // default = disable
+    unsigned dhtLogLevel {0}; // default = disable
     AccountFactory accountFactory;
 
     std::vector<libjami::Message> getLastMessages(const std::string& accountID,
-- 
GitLab