63static std::unique_ptr<const std::map<TMVA::EMsgType, std::string> >
gOwnTypeMap;
64static std::unique_ptr<const std::map<TMVA::EMsgType, std::string> >
gOwnColorMap;
98 fStrSource (
"Unknown" ),
110 std::ostringstream(),
130 if (&parent !=
this) {
146 if (fActiveType == kHEADER)
150 if (fActiveType == kWARNING)
167 return static_cast<UInt_t>(fgMaxSourceSize);
190 std::string message = this->str();
204 this->WriteMsg( fActiveType,
msg );
222 if ( (
type < fMinType || fgInhibitOutput) &&
type!=kFATAL )
return;
224 std::map<EMsgType, std::string>::const_iterator stype;
226 if ((stype = fgTypeMap.load()->find(
type )) != fgTypeMap.load()->end()) {
230 if (
type == kHEADER ||
type ==kWARNING)
231 std::cout << fgPrefix <<
line << std::endl;
232 else if (
type == kINFO ||
type == kVERBOSE)
234 std::cout <<
line << std::endl;
237 std::cout << fgColorMap.load()->find(
type )->second <<
"<" << stype->second <<
">" <<
line <<
"\033[0m" << std::endl;
242 if (
type == kINFO) std::cout << fgPrefix <<
line << std::endl;
243 else std::cout << fgPrefix <<
"<" << stype->second <<
"> " <<
line << std::endl;
249 if (
type == kFATAL) {
250 std::cout <<
"***> abort program execution" << std::endl;
251 throw std::runtime_error(
"FATAL error");
273 std::map<TMVA::EMsgType, std::string>*tmp =
new std::map<TMVA::EMsgType, std::string>();
275 (*tmp)[kVERBOSE] = std::string(
"VERBOSE");
276 (*tmp)[kDEBUG] = std::string(
"DEBUG");
277 (*tmp)[kINFO] = std::string(
"INFO");
278 (*tmp)[kWARNING] = std::string(
"WARNING");
279 (*tmp)[kERROR] = std::string(
"ERROR");
280 (*tmp)[kFATAL] = std::string(
"FATAL");
281 (*tmp)[kSILENT] = std::string(
"SILENT");
282 (*tmp)[kHEADER] = std::string(
"HEADER");
283 const std::map<TMVA::EMsgType, std::string>*
expected=0;
284 if(fgTypeMap.compare_exchange_strong(
expected,tmp)) {
294 std::map<TMVA::EMsgType, std::string>*tmp =
new std::map<TMVA::EMsgType, std::string>();
296 (*tmp)[kVERBOSE] = std::string(
"");
297 (*tmp)[kDEBUG] = std::string(
"\033[34m");
298 (*tmp)[kINFO] = std::string(
"");
299 (*tmp)[kWARNING] = std::string(
"\033[1;31m");
300 (*tmp)[kERROR] = std::string(
"\033[31m");
301 (*tmp)[kFATAL] = std::string(
"\033[37;41;1m");
302 (*tmp)[kSILENT] = std::string(
"\033[30m");
304 const std::map<TMVA::EMsgType, std::string>*
expected=0;
305 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
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
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
Mother of all ROOT objects.