56 #if __cplusplus > 199711L 65 static std::unique_ptr<const std::map<TMVA::EMsgType, std::string> >
gOwnTypeMap;
66 static std::unique_ptr<const std::map<TMVA::EMsgType, std::string> >
gOwnColorMap;
112 std::ostringstream(),
132 if (&parent !=
this) {
147 std::string source_name;
154 source_name =
"<WARNING>";
158 source_name +=
"...";
171 for (std::string::size_type i=source_name.size(); i<
fgMaxSourceSize; i++) source_name.push_back(
' ' );
184 std::string message = this->str();
185 std::string::size_type previous_pos = 0, current_pos = 0;
189 current_pos = message.find(
'\n', previous_pos );
190 std::string
line = message.substr( previous_pos, current_pos - previous_pos );
192 std::ostringstream message_to_send;
194 message_to_send.setf( std::ios::adjustfield, std::ios::left );
197 std::string msg = message_to_send.str();
200 if (current_pos == message.npos)
break;
201 previous_pos = current_pos + 1;
218 std::map<EMsgType, std::string>::const_iterator stype;
225 std::cout <<
fgPrefix << line << std::endl;
228 std::cout << line << std::endl;
231 std::cout <<
fgColorMap.load()->find( type )->second <<
"<" << stype->second <<
">" << line <<
"\033[0m" << std::endl;
236 if (type ==
kINFO) std::cout <<
fgPrefix << line << std::endl;
237 else std::cout <<
fgPrefix <<
"<" << stype->second <<
"> " << line << std::endl;
244 std::cout <<
"***> abort program execution" << std::endl;
245 throw std::runtime_error(
"FATAL error");
267 std::map<TMVA::EMsgType, std::string>*tmp =
new std::map<TMVA::EMsgType, std::string>();
269 (*tmp)[
kVERBOSE] = std::string(
"VERBOSE");
270 (*tmp)[
kDEBUG] = std::string(
"DEBUG");
271 (*tmp)[
kINFO] = std::string(
"INFO");
272 (*tmp)[
kWARNING] = std::string(
"WARNING");
273 (*tmp)[
kERROR] = std::string(
"ERROR");
274 (*tmp)[
kFATAL] = std::string(
"FATAL");
275 (*tmp)[
kSILENT] = std::string(
"SILENT");
276 (*tmp)[
kHEADER] = std::string(
"HEADER");
277 const std::map<TMVA::EMsgType, std::string>* expected=0;
278 if(
fgTypeMap.compare_exchange_strong(expected,tmp)) {
280 gOwnTypeMap.reset(tmp);
288 std::map<TMVA::EMsgType, std::string>*tmp =
new std::map<TMVA::EMsgType, std::string>();
291 (*tmp)[
kDEBUG] = std::string(
"\033[34m");
292 (*tmp)[
kINFO] = std::string(
"");
293 (*tmp)[
kWARNING] = std::string(
"\033[1;31m");
294 (*tmp)[
kERROR] = std::string(
"\033[31m");
295 (*tmp)[
kFATAL] = std::string(
"\033[37;41;1m");
296 (*tmp)[
kSILENT] = std::string(
"\033[30m");
298 const std::map<TMVA::EMsgType, std::string>* expected=0;
299 if(
fgColorMap.compare_exchange_strong(expected,tmp)) {
301 gOwnColorMap.reset(tmp);
static const std::string fgPrefix
void Send()
activates the logger writer
const TObject * fObjSource
static Bool_t fgInhibitOutput
static void InhibitOutput()
static std::unique_ptr< const std::map< TMVA::EMsgType, std::string > > gOwnColorMap
static const std::map< EMsgType, std::string > * fgTypeMap
static const UInt_t fgMaxSourceSize
MsgLogger(const TObject *source, EMsgType minType=kINFO)
constructor
std::string GetPrintedSource() const
the full logger prefix
MsgLogger & operator=(const MsgLogger &parent)
assingment operator
void WriteMsg(EMsgType type, const std::string &line) const
putting the output string, the message type, and the color switcher together into a single string ...
void InitMaps()
Create the message type and color maps.
static const std::string fgSuffix
static MsgLogger & Endmsg(MsgLogger &logger)
end line
std::string GetFormattedSource() const
make sure the source name is no longer than fgMaxSourceSize:
static const std::map< EMsgType, std::string > * fgColorMap
Mother of all ROOT objects.
static std::unique_ptr< const std::map< TMVA::EMsgType, std::string > > gOwnTypeMap
static void EnableOutput()