62static std::unique_ptr<const std::map<TMVA::EMsgType, std::string> >
gOwnTypeMap;
63static std::unique_ptr<const std::map<TMVA::EMsgType, std::string> >
gOwnColorMap;
129 if (&parent !=
this) {
144 std::string source_name;
151 source_name =
"<WARNING>";
155 source_name +=
"...";
176 for (std::string::size_type i=source_name.size(); i<
fgMaxSourceSize; i++) source_name.push_back(
' ' );
189 std::string message = this->str();
190 std::string::size_type previous_pos = 0, current_pos = 0;
194 current_pos = message.find(
'\n', previous_pos );
195 std::string
line = message.substr( previous_pos, current_pos - previous_pos );
197 std::ostringstream message_to_send;
199 message_to_send.setf( std::ios::adjustfield, std::ios::left );
202 std::string msg = message_to_send.str();
205 if (current_pos == message.npos)
break;
206 previous_pos = current_pos + 1;
223 std::map<EMsgType, std::string>::const_iterator stype;
226 if (!
gConfig().IsSilent() || type==kFATAL) {
229 if (type == kHEADER || type ==kWARNING)
231 else if (type == kINFO || type == kVERBOSE)
233 std::cout <<
line << std::endl;
236 std::cout <<
fgColorMap.load()->find( type )->second <<
"<" << stype->second <<
">" <<
line <<
"\033[0m" << std::endl;
241 if (type == kINFO) std::cout <<
fgPrefix <<
line << std::endl;
242 else std::cout <<
fgPrefix <<
"<" << stype->second <<
"> " <<
line << std::endl;
248 if (type == kFATAL) {
249 std::cout <<
"***> abort program execution" << std::endl;
250 throw std::runtime_error(
"FATAL error");
272 std::map<TMVA::EMsgType, std::string>*tmp =
new std::map<TMVA::EMsgType, std::string>();
274 (*tmp)[kVERBOSE] = std::string(
"VERBOSE");
275 (*tmp)[kDEBUG] = std::string(
"DEBUG");
276 (*tmp)[kINFO] = std::string(
"INFO");
277 (*tmp)[kWARNING] = std::string(
"WARNING");
278 (*tmp)[kERROR] = std::string(
"ERROR");
279 (*tmp)[kFATAL] = std::string(
"FATAL");
280 (*tmp)[kSILENT] = std::string(
"SILENT");
281 (*tmp)[kHEADER] = std::string(
"HEADER");
282 const std::map<TMVA::EMsgType, std::string>* expected=0;
283 if(
fgTypeMap.compare_exchange_strong(expected,tmp)) {
293 std::map<TMVA::EMsgType, std::string>*tmp =
new std::map<TMVA::EMsgType, std::string>();
295 (*tmp)[kVERBOSE] = std::string(
"");
296 (*tmp)[kDEBUG] = std::string(
"\033[34m");
297 (*tmp)[kINFO] = std::string(
"");
298 (*tmp)[kWARNING] = std::string(
"\033[1;31m");
299 (*tmp)[kERROR] = std::string(
"\033[31m");
300 (*tmp)[kFATAL] = std::string(
"\033[37;41;1m");
301 (*tmp)[kSILENT] = std::string(
"\033[30m");
303 const std::map<TMVA::EMsgType, std::string>* expected=0;
304 if(
fgColorMap.compare_exchange_strong(expected,tmp)) {
static std::unique_ptr< const std::map< TMVA::EMsgType, std::string > > gOwnTypeMap
static std::unique_ptr< const std::map< TMVA::EMsgType, std::string > > gOwnColorMap
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
ostringstream derivative to redirect and format output
static const UInt_t fgMaxSourceSize
maximum length of source name
static const std::string fgPrefix
the prefix of the source name
MsgLogger(const TObject *source, EMsgType minType=kINFO)
constructor
MsgLogger & operator=(const MsgLogger &parent)
assignment operator
std::string GetPrintedSource() const
the full logger prefix
std::string fStrSource
alternative string source
static std::atomic< const std::map< EMsgType, std::string > * > fgColorMap
matches output types with terminal colors
static UInt_t GetMaxSourceSize()
returns the maximum source size
static void InhibitOutput()
const TObject * fObjSource
the source TObject (used for name)
static const std::string fgSuffix
suffix following source name
static void EnableOutput()
EMsgType fMinType
minimum type for output
static std::atomic< const std::map< EMsgType, std::string > * > fgTypeMap
matches output types with strings
std::string GetFormattedSource() const
make sure the source name is no longer than fgMaxSourceSize:
void InitMaps()
Create the message type and color maps.
EMsgType fActiveType
active type
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
static MsgLogger & Endmsg(MsgLogger &logger)
end line
static std::atomic< Bool_t > fgInhibitOutput
flag to suppress all output
void Send()
activates the logger writer
TObject()
TObject constructor.