1515namespace logger {
1616
1717Logger create_logger (std::string logger_name, bool skip_prefix = false ,
18- bool skip_linebreak = false );
19-
20- inline Logger &get_logger (std::string name = " common" ) {
21- static Logger logger = create_logger (std::move (name));
18+ bool skip_linebreak = false ,
19+ logger::Level default_log_level = logger::Level::QUIET);
20+
21+ inline Logger &
22+ get_logger (std::string name = " common" ,
23+ logger::Level default_log_level = logger::Level::QUIET) {
24+ static Logger logger =
25+ create_logger (std::move (name), /* skip_prefix*/ false ,
26+ /* slip_linebreak*/ false , default_log_level);
2227 return logger;
2328}
2429
@@ -99,6 +104,8 @@ template <typename T> inline std::string toHex(T t) {
99104// / UR_LOG_LOADER="level:info;flush:warning;output:file,out.log"
100105// / @param logger_name name that should be appended to the `UR_LOG_` prefix to
101106// / get the proper environment variable, ie. "loader"
107+ // / @param default_log_level provides the default logging configuration when the environment
108+ // / variable is not provided or cannot be parsed
102109// / @return an instance of a logger::Logger. In case of failure in the parsing of
103110// / the environment variable, returns a default logger with the following
104111// / options:
@@ -107,23 +114,25 @@ template <typename T> inline std::string toHex(T t) {
107114// / to be printed immediately as they occur
108115// / - output: stderr
109116inline Logger create_logger (std::string logger_name, bool skip_prefix,
110- bool skip_linebreak) {
117+ bool skip_linebreak,
118+ logger::Level default_log_level) {
111119 std::transform (logger_name.begin (), logger_name.end (), logger_name.begin (),
112120 ::toupper);
113121 std::stringstream env_var_name;
114- const auto default_level = logger::Level::QUIET;
115122 const auto default_flush_level = logger::Level::ERR;
116123 const std::string default_output = " stderr" ;
117- auto level = default_level ;
124+ auto level = default_log_level ;
118125 auto flush_level = default_flush_level;
119126 std::unique_ptr<logger::Sink> sink;
120127
121128 env_var_name << " UR_LOG_" << logger_name;
122129 try {
123130 auto map = getenv_to_map (env_var_name.str ().c_str ());
124131 if (!map.has_value ()) {
125- return Logger (std::make_unique<logger::StderrSink>(
126- std::move (logger_name), skip_prefix, skip_linebreak));
132+ return Logger (
133+ default_log_level,
134+ std::make_unique<logger::StderrSink>(
135+ std::move (logger_name), skip_prefix, skip_linebreak));
127136 }
128137
129138 auto kv = map->find (" level" );
@@ -151,8 +160,10 @@ inline Logger create_logger(std::string logger_name, bool skip_prefix,
151160 std::cerr << " Wrong logger environment variable parameter: '"
152161 << map->begin ()->first
153162 << " '. Default logger options are set." ;
154- return Logger (std::make_unique<logger::StderrSink>(
155- std::move (logger_name), skip_prefix, skip_linebreak));
163+ return Logger (
164+ default_log_level,
165+ std::make_unique<logger::StderrSink>(
166+ std::move (logger_name), skip_prefix, skip_linebreak));
156167 }
157168
158169 sink = values.size () == 2
@@ -164,8 +175,9 @@ inline Logger create_logger(std::string logger_name, bool skip_prefix,
164175 std::cerr << " Error when creating a logger instance from the '"
165176 << env_var_name.str () << " ' environment variable:\n "
166177 << e.what () << std::endl;
167- return Logger (std::make_unique<logger::StderrSink>(
168- std::move (logger_name), skip_prefix, skip_linebreak));
178+ return Logger (default_log_level,
179+ std::make_unique<logger::StderrSink>(
180+ std::move (logger_name), skip_prefix, skip_linebreak));
169181 }
170182 sink->setFlushLevel (flush_level);
171183
0 commit comments