44#include < filesystem>
55#include < iostream>
66#include < numeric>
7+ #include < optional>
78
89#include " proto/message_translation/ssl_wrapper.h"
910#include " proto/parameters.pb.h"
@@ -45,6 +46,33 @@ void cleanup(int signal_num)
4546 exit (0 );
4647}
4748
49+ /* *
50+ * Parses a string into a LEVELS enum value of DEBUG, INFO, WARNING, or FATAL.
51+ * If the log level is not recognised, returns std::nullopt
52+ *
53+ * @param log_level The log level argument as a string
54+ */
55+ std::optional<LEVELS> parseLogLevel (const std::string& log_level)
56+ {
57+ if (log_level == " DEBUG" )
58+ {
59+ return DEBUG;
60+ }
61+ else if (log_level == " INFO" )
62+ {
63+ return INFO;
64+ }
65+ else if (log_level == " WARNING" )
66+ {
67+ return WARNING;
68+ }
69+ else if (log_level == " FATAL" )
70+ {
71+ return FATAL;
72+ }
73+ return std::nullopt ;
74+ }
75+
4876int main (int argc, char ** argv)
4977{
5078 // Setup dynamic parameters
@@ -54,6 +82,7 @@ int main(int argc, char** argv)
5482 std::string runtime_dir = " /tmp/tbots" ;
5583 bool friendly_colour_yellow = false ;
5684 bool ci = false ;
85+ std::string log_level = " DEBUG" ;
5786 };
5887
5988 CommandLineArgs args;
@@ -70,6 +99,9 @@ int main(int argc, char** argv)
7099 desc.add_options ()(
71100 " ci" , boost::program_options::bool_switch (&args.ci ),
72101 " If true, then the World timestamp will be used to as the time provider for ProtoLogger" );
102+ desc.add_options ()(
103+ " log_level" , boost::program_options::value<std::string>(&args.log_level ),
104+ " The minimum g3log level that will be printed (DEBUG|INFO|WARNING|FATAL)" );
73105
74106 boost::program_options::variables_map vm;
75107 boost::program_options::store (parse_command_line (argc, argv, desc), vm);
@@ -91,6 +123,15 @@ int main(int argc, char** argv)
91123 TracySetProgramName (" Thunderbots: Yellow" );
92124 }
93125
126+ std::optional<LEVELS> minimum_log_level = parseLogLevel (args.log_level );
127+
128+ if (!minimum_log_level.has_value ())
129+ {
130+ std::cout << " error: --log_level=" << args.log_level
131+ << " is not a valid option." << std::endl;
132+ return 1 ;
133+ }
134+
94135 std::function<double ()> time_provider;
95136 if (!args.ci )
96137 {
@@ -110,7 +151,8 @@ int main(int argc, char** argv)
110151 }
111152 proto_logger = std::make_shared<ProtoLogger>(args.runtime_dir , time_provider,
112153 args.friendly_colour_yellow );
113- LoggerSingleton::initializeLogger (args.runtime_dir , proto_logger);
154+ LoggerSingleton::initializeLogger (args.runtime_dir , proto_logger, true ,
155+ *minimum_log_level);
114156 TbotsProto::ThunderbotsConfig tbots_proto;
115157
116158 // Override friendly color
0 commit comments