The Gaudi Framework  master (37c0b60a)
MsgStream Class Reference

#include <GaudiKernel/MsgStream.h>

Collaboration diagram for MsgStream:

Public Member Functions

GAUDI_API MsgStream (IMessageSvc *svc, int buffer_length=128)
 Standard constructor: Connect to message service for output. More...
 
GAUDI_API MsgStream (IMessageSvc *svc, std::string source, int buffer_length=128)
 Standard constructor: Connect to message service for output. More...
 
 MsgStream (const MsgStream &msg)
 Copy constructor. More...
 
virtual GAUDI_API ~MsgStream ()=default
 Standard destructor. More...
 
MsgStreamreport (int lvl)
 Initialize report of new message: activate if print level is sufficient. More...
 
virtual GAUDI_API MsgStreamdoOutput ()
 Output method. More...
 
const std::stringbuffer () const
 Access string buffer. More...
 
std::ostringstreamstream ()
 Access string MsgStream. More...
 
void setMsgSvc (IMessageSvc *svc)
 Update IMessageSvc pointer. More...
 
void setLevel (int level)
 Update outputlevel. More...
 
MSG::Level level () const
 Retrieve output level. More...
 
MSG::Level currentLevel () const
 Retrieve current stream output level. More...
 
void activate ()
 Activate MsgStream. More...
 
void deactivate ()
 Deactivate MsgStream. More...
 
bool isActive () const
 Accessor: is MsgStream active. More...
 
MsgStreamflush ()
 
MsgStreamwrite (const char *buff, int len)
 
MsgStreamoperator<< (MsgStream &(*_f)(MsgStream &))
 Accept MsgStream modifiers. More...
 
MsgStreamoperator<< (std::ostream &(*_f)(std::ostream &))
 Accept oMsgStream modifiers. More...
 
MsgStreamoperator<< (std::ios &(*_f)(std::ios &))
 Accept ios modifiers. More...
 
MsgStreamoperator<< (MSG::Level level)
 Accept MsgStream activation using MsgStreamer operator. More...
 
MsgStreamoperator<< (long long arg)
 
MsgStreamoperator<< (std::ios_base &(*_f)(std::ios_base &))
 Accept ios base class modifiers. More...
 
std::streamsize width () const
 IOS emulation. More...
 
std::streamsize width (std::streamsize v)
 
std::streamsize precision () const
 
std::streamsize precision (int v)
 
long flags () const
 
long flags (FLAG_TYPE v)
 
long setf (FLAG_TYPE v)
 
char fill () const
 
char fill (char v)
 
int rdstate () const
 
bool good () const
 
bool eof () const
 
bool bad () const
 
int setf (FLAG_TYPE _f, FLAG_TYPE _m)
 
void unsetf (FLAG_TYPE _l)
 
void clear (STATE_TYPE _i=std::ios_base::failbit)
 
GAUDI_API void setColor (MSG::Color col)
 Set the text color. More...
 
GAUDI_API void setColor (MSG::Color fg, MSG::Color bg)
 Set the foreground and background colors. More...
 
GAUDI_API void resetColor ()
 Reset the colors to defaults. More...
 

Static Public Member Functions

static GAUDI_API bool enableCountInactive (bool value=true)
 Enable/disable the count of inactive messages. More...
 
static GAUDI_API bool countInactive ()
 Returns the state of the counting of inactive messages (enabled/disabled). More...
 

Protected Attributes

IMessageSvcm_service
 Pointer to message service if buffer has send. More...
 
std::string m_buffer
 Use standard string for information buffering. More...
 
std::string m_source
 Use std::string for source information to be passed to the message service. More...
 
std::ostringstream m_stream
 String MsgStream associated to buffer. More...
 
bool m_active = false
 Flag set to true if formatting engine is active. More...
 
MSG::Level m_level
 Debug level of the message service. More...
 
MSG::Level m_currLevel
 Current debug level. More...
 
bool m_useColors
 use colors More...
 
IInactiveMessageCounterm_inactCounter = nullptr
 Pointer to service counting messages prepared but not printed because of wrong level. More...
 

Static Protected Attributes

static bool m_countInactive = false
 Flag to state if the inactive messages has to be counted. More...
 

Private Types

typedef std::ios_base::fmtflags FLAG_TYPE
 Error return code in case ios modification is requested for inactive streams. More...
 
typedef std::ios_base::iostate STATE_TYPE
 

Detailed Description

Definition of the MsgStream class used to transmit messages. This class is intended to ease the use of error logging to the message service

Author
M.Frank
Sebastien Ponce

Definition at line 33 of file MsgStream.h.

Member Typedef Documentation

◆ FLAG_TYPE

typedef std::ios_base::fmtflags MsgStream::FLAG_TYPE
private

Error return code in case ios modification is requested for inactive streams.

Definition at line 38 of file MsgStream.h.

◆ STATE_TYPE

typedef std::ios_base::iostate MsgStream::STATE_TYPE
private

Definition at line 39 of file MsgStream.h.

Constructor & Destructor Documentation

◆ MsgStream() [1/3]

MsgStream::MsgStream ( IMessageSvc svc,
int  buffer_length = 128 
)

Standard constructor: Connect to message service for output.

Definition at line 49 of file MsgStream.cpp.

49  : m_service( svc ) {
50  setLevel( svc ? svc->outputLevel() : MSG::INFO );
52  m_useColors = ( svc ? svc->useColor() : false );
53 #ifndef NDEBUG
54  m_inactCounter = svc ? Gaudi::Cast<IInactiveMessageCounter>( svc ) : 0;
55 #endif
56 }

◆ MsgStream() [2/3]

MsgStream::MsgStream ( IMessageSvc svc,
std::string  source,
int  buffer_length = 128 
)

Standard constructor: Connect to message service for output.

Definition at line 58 of file MsgStream.cpp.

58  : m_service( svc ), m_source( std::move( source ) ) {
59  setLevel( svc ? svc->outputLevel( m_source ) : MSG::INFO );
61  m_useColors = ( svc && svc->useColor() );
62 #ifndef NDEBUG
63  m_inactCounter = svc ? Gaudi::Cast<IInactiveMessageCounter>( svc ) : 0;
64 #endif
65 }

◆ MsgStream() [3/3]

MsgStream::MsgStream ( const MsgStream msg)
inline

Copy constructor.

Definition at line 70 of file MsgStream.h.

71  : m_service( msg.m_service )
72  , m_active( msg.m_active )
73  , m_level( msg.m_level )
74  , m_currLevel( msg.m_currLevel )
75  , m_useColors( msg.m_useColors )
76  , m_inactCounter( msg.m_inactCounter ) {
77  try { // ignore exception if we cannot copy the string
78  m_source = msg.m_source;
79  } catch ( ... ) {}
80  }

◆ ~MsgStream()

virtual GAUDI_API MsgStream::~MsgStream ( )
virtualdefault

Standard destructor.

Member Function Documentation

◆ activate()

void MsgStream::activate ( )
inline

Activate MsgStream.

Definition at line 116 of file MsgStream.h.

116 { m_active = true; }

◆ bad()

bool MsgStream::bad ( ) const
inline

Definition at line 176 of file MsgStream.h.

176 { return isActive() && m_stream.bad(); }

◆ buffer()

const std::string& MsgStream::buffer ( ) const
inline

Access string buffer.

Definition at line 101 of file MsgStream.h.

101 { return m_buffer; }

◆ clear()

void MsgStream::clear ( STATE_TYPE  _i = std::ios_base::failbit)
inline

Definition at line 181 of file MsgStream.h.

181  {
182  if ( isActive() ) m_stream.clear( _i );
183  }

◆ countInactive()

bool MsgStream::countInactive ( )
static

Returns the state of the counting of inactive messages (enabled/disabled).

Definition at line 47 of file MsgStream.cpp.

47 { return m_countInactive; }

◆ currentLevel()

MSG::Level MsgStream::currentLevel ( ) const
inline

Retrieve current stream output level.

Definition at line 114 of file MsgStream.h.

114 { return m_currLevel; }

◆ deactivate()

void MsgStream::deactivate ( )
inline

Deactivate MsgStream.

Definition at line 118 of file MsgStream.h.

118 { m_active = false; }

◆ doOutput()

MsgStream & MsgStream::doOutput ( )
virtual

Output method.

Definition at line 67 of file MsgStream.cpp.

67  {
68  try {
69  // This piece of code may throw and we cannot afford it when we print a message
70  // in the middle of a catch block.
71  if ( isActive() ) {
73  if ( m_service ) {
75  } else {
76  std::cout << msg << std::endl;
77  }
78  }
79  m_stream.str( "" );
80  } catch ( ... ) {}
81  return *this;
82 }

◆ enableCountInactive()

bool MsgStream::enableCountInactive ( bool  value = true)
static

Enable/disable the count of inactive messages.

Returns the previous state.

Definition at line 41 of file MsgStream.cpp.

41  {
42  bool old = m_countInactive;
43  m_countInactive = value;
44  return old;
45 }

◆ eof()

bool MsgStream::eof ( ) const
inline

Definition at line 175 of file MsgStream.h.

175 { return isActive() && m_stream.eof(); }

◆ fill() [1/2]

char MsgStream::fill ( ) const
inline

Definition at line 171 of file MsgStream.h.

171 { return isActive() ? m_stream.fill() : (char)-1; }

◆ fill() [2/2]

char MsgStream::fill ( char  v)
inline

Definition at line 172 of file MsgStream.h.

172 { return isActive() ? m_stream.fill( v ) : (char)-1; }

◆ flags() [1/2]

long MsgStream::flags ( ) const
inline

Definition at line 168 of file MsgStream.h.

168 { return isActive() ? m_stream.flags() : 0; }

◆ flags() [2/2]

long MsgStream::flags ( FLAG_TYPE  v)
inline

Definition at line 169 of file MsgStream.h.

169 { return isActive() ? m_stream.flags( v ) : 0; }

◆ flush()

MsgStream& MsgStream::flush ( )
inline

Definition at line 122 of file MsgStream.h.

122  {
123  if ( isActive() ) m_stream.flush();
124  return *this;
125  }

◆ good()

bool MsgStream::good ( ) const
inline

Definition at line 174 of file MsgStream.h.

174 { return isActive() && m_stream.good(); }

◆ isActive()

bool MsgStream::isActive ( ) const
inline

Accessor: is MsgStream active.

Definition at line 120 of file MsgStream.h.

120 { return m_active; }

◆ level()

MSG::Level MsgStream::level ( ) const
inline

Retrieve output level.

Definition at line 112 of file MsgStream.h.

112 { return m_level; }

◆ operator<<() [1/6]

MsgStream& MsgStream::operator<< ( long long  arg)
inline

Definition at line 148 of file MsgStream.h.

148  {
149  try {
150  // this may throw, and we cannot afford it if the stream is used in a catch block
151  if ( isActive() ) { m_stream << arg; }
152  } catch ( ... ) {}
153  return *this;
154  }

◆ operator<<() [2/6]

MsgStream& MsgStream::operator<< ( MSG::Level  level)
inline

Accept MsgStream activation using MsgStreamer operator.

Definition at line 147 of file MsgStream.h.

147 { return report( level ); }

◆ operator<<() [3/6]

MsgStream& MsgStream::operator<< ( MsgStream &(*)(MsgStream &)  _f)
inline

Accept MsgStream modifiers.

Definition at line 132 of file MsgStream.h.

132  {
133  if ( isActive() ) _f( *this );
134  return *this;
135  }

◆ operator<<() [4/6]

MsgStream& MsgStream::operator<< ( std::ios &(*)(std::ios &)  _f)
inline

Accept ios modifiers.

Definition at line 142 of file MsgStream.h.

142  {
143  if ( isActive() ) _f( m_stream );
144  return *this;
145  }

◆ operator<<() [5/6]

MsgStream& MsgStream::operator<< ( std::ios_base &(*)(std::ios_base &)  _f)
inline

Accept ios base class modifiers.

Definition at line 157 of file MsgStream.h.

157  {
158  if ( isActive() ) _f( m_stream );
159  return *this;
160  }

◆ operator<<() [6/6]

MsgStream& MsgStream::operator<< ( std::ostream &(*)(std::ostream &)  _f)
inline

Accept oMsgStream modifiers.

Definition at line 137 of file MsgStream.h.

137  {
138  if ( isActive() ) _f( m_stream );
139  return *this;
140  }

◆ precision() [1/2]

std::streamsize MsgStream::precision ( ) const
inline

Definition at line 165 of file MsgStream.h.

165 { return isActive() ? m_stream.precision() : 0; }

◆ precision() [2/2]

std::streamsize MsgStream::precision ( int  v)
inline

Definition at line 166 of file MsgStream.h.

166 { return isActive() ? m_stream.precision( v ) : 0; }

◆ rdstate()

int MsgStream::rdstate ( ) const
inline

Definition at line 173 of file MsgStream.h.

173 { return isActive() ? m_stream.rdstate() : std::ios_base::failbit; }

◆ report()

MsgStream& MsgStream::report ( int  lvl)
inline

Initialize report of new message: activate if print level is sufficient.

Definition at line 84 of file MsgStream.h.

84  {
85  lvl = ( lvl >= MSG::NUM_LEVELS ) ? MSG::ALWAYS : ( lvl < MSG::NIL ) ? MSG::NIL : lvl;
86  if ( ( m_currLevel = MSG::Level( lvl ) ) >= level() ) {
87  activate();
88  } else {
89  deactivate();
90 #ifndef NDEBUG
93  }
94 #endif
95  }
96  return *this;
97  }

◆ resetColor()

void MsgStream::resetColor ( )

Reset the colors to defaults.

Definition at line 109 of file MsgStream.cpp.

109  {
110 #ifndef _WIN32
111  if ( m_useColors ) {
112  try { // this may throw and we must not do it
113  m_stream << "\x1b[m" << m_service->getLogColor( m_currLevel );
114  } catch ( ... ) {}
115  }
116 #endif
117 }

◆ setColor() [1/2]

void MsgStream::setColor ( MSG::Color  col)

Set the text color.

Definition at line 84 of file MsgStream.cpp.

84  {
85 #ifndef _WIN32
86  if ( m_useColors ) {
87  int fc = 90 + col;
88  try { // this may throw and we must not do it
89  m_stream << "\x1b[" << fc << ";1m";
90  } catch ( ... ) {}
91  }
92 #endif
93 }

◆ setColor() [2/2]

void MsgStream::setColor ( MSG::Color  fg,
MSG::Color  bg 
)

Set the foreground and background colors.

Definition at line 95 of file MsgStream.cpp.

95  {
96 #ifndef _WIN32
97  if ( m_useColors ) {
98  try { // this may throw and we must not do it
99  int fc = 90 + fg;
100  m_stream << "\x1b[" << fc;
101  int bc = 100 + bg;
102  m_stream << ";" << bc;
103  m_stream << ";1m";
104  } catch ( ... ) {}
105  }
106 #endif
107 }

◆ setf() [1/2]

int MsgStream::setf ( FLAG_TYPE  _f,
FLAG_TYPE  _m 
)
inline

Definition at line 177 of file MsgStream.h.

177 { return isActive() ? m_stream.setf( _f, _m ) : 0; }

◆ setf() [2/2]

long MsgStream::setf ( FLAG_TYPE  v)
inline

Definition at line 170 of file MsgStream.h.

170 { return isActive() ? m_stream.setf( v ) : 0; }

◆ setLevel()

void MsgStream::setLevel ( int  level)
inline

Update outputlevel.

Definition at line 107 of file MsgStream.h.

107  {
109  m_level = MSG::Level( level );
110  }

◆ setMsgSvc()

void MsgStream::setMsgSvc ( IMessageSvc svc)
inline

Update IMessageSvc pointer.

Definition at line 105 of file MsgStream.h.

105 { m_service = svc; }

◆ stream()

std::ostringstream& MsgStream::stream ( )
inline

Access string MsgStream.

Definition at line 103 of file MsgStream.h.

103 { return m_stream; }

◆ unsetf()

void MsgStream::unsetf ( FLAG_TYPE  _l)
inline

Definition at line 178 of file MsgStream.h.

178  {
179  if ( isActive() ) m_stream.unsetf( _l );
180  }

◆ width() [1/2]

std::streamsize MsgStream::width ( ) const
inline

IOS emulation.

Definition at line 163 of file MsgStream.h.

163 { return isActive() ? m_stream.width() : 0; }

◆ width() [2/2]

std::streamsize MsgStream::width ( std::streamsize  v)
inline

Definition at line 164 of file MsgStream.h.

164 { return isActive() ? m_stream.width( v ) : 0; }

◆ write()

MsgStream& MsgStream::write ( const char *  buff,
int  len 
)
inline

Definition at line 127 of file MsgStream.h.

127  {
128  if ( isActive() ) m_stream.write( buff, len );
129  return *this;
130  }

Member Data Documentation

◆ m_active

bool MsgStream::m_active = false
protected

Flag set to true if formatting engine is active.

Definition at line 51 of file MsgStream.h.

◆ m_buffer

std::string MsgStream::m_buffer
protected

Use standard string for information buffering.

Definition at line 45 of file MsgStream.h.

◆ m_countInactive

bool MsgStream::m_countInactive = false
staticprotected

Flag to state if the inactive messages has to be counted.

Definition at line 62 of file MsgStream.h.

◆ m_currLevel

MSG::Level MsgStream::m_currLevel
protected

Current debug level.

Definition at line 55 of file MsgStream.h.

◆ m_inactCounter

IInactiveMessageCounter* MsgStream::m_inactCounter = nullptr
protected

Pointer to service counting messages prepared but not printed because of wrong level.

Definition at line 60 of file MsgStream.h.

◆ m_level

MSG::Level MsgStream::m_level
protected

Debug level of the message service.

Definition at line 53 of file MsgStream.h.

◆ m_service

IMessageSvc* MsgStream::m_service
protected

Pointer to message service if buffer has send.

Definition at line 43 of file MsgStream.h.

◆ m_source

std::string MsgStream::m_source
protected

Use std::string for source information to be passed to the message service.

Definition at line 47 of file MsgStream.h.

◆ m_stream

std::ostringstream MsgStream::m_stream
protected

String MsgStream associated to buffer.

Definition at line 49 of file MsgStream.h.

◆ m_useColors

bool MsgStream::m_useColors
protected

use colors

Definition at line 57 of file MsgStream.h.


The documentation for this class was generated from the following files:
std::ostringstream::width
T width(T... args)
MsgStream::m_service
IMessageSvc * m_service
Pointer to message service if buffer has send.
Definition: MsgStream.h:43
std::move
T move(T... args)
MSG::INFO
@ INFO
Definition: IMessageSvc.h:25
IMessageSvc::getLogColor
virtual std::string getLogColor(int logLevel) const =0
Get the color codes for various log levels.
MsgStream::m_useColors
bool m_useColors
use colors
Definition: MsgStream.h:57
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:19
MsgStream::report
MsgStream & report(int lvl)
Initialize report of new message: activate if print level is sufficient.
Definition: MsgStream.h:84
std::ostringstream::rdstate
T rdstate(T... args)
MsgStream::m_level
MSG::Level m_level
Debug level of the message service.
Definition: MsgStream.h:53
IMessageSvc::useColor
virtual bool useColor() const =0
Show whether colors are used.
IMessageSvc::reportMessage
virtual void reportMessage(const Message &msg, int outputLevel)=0
Report a message by sending a Message object to the message service.
std::ostringstream::write
T write(T... args)
std::ostringstream::clear
T clear(T... args)
std::ostringstream::fill
T fill(T... args)
IMessageSvc::outputLevel
virtual int outputLevel() const =0
Retrieve the current output level threshold.
Message
Definition: Message.h:26
MsgStream::m_stream
std::ostringstream m_stream
String MsgStream associated to buffer.
Definition: MsgStream.h:49
std::cout
std::ostringstream::bad
T bad(T... args)
MsgStream::m_source
std::string m_source
Use std::string for source information to be passed to the message service.
Definition: MsgStream.h:47
std::ostringstream::setf
T setf(T... args)
std::ostringstream::flush
T flush(T... args)
MsgStream::m_buffer
std::string m_buffer
Use standard string for information buffering.
Definition: MsgStream.h:45
MsgStream::deactivate
void deactivate()
Deactivate MsgStream.
Definition: MsgStream.h:118
MsgStream::m_active
bool m_active
Flag set to true if formatting engine is active.
Definition: MsgStream.h:51
std::ostringstream::flags
T flags(T... args)
std::ostringstream::good
T good(T... args)
MsgStream::m_currLevel
MSG::Level m_currLevel
Current debug level.
Definition: MsgStream.h:55
MSG::Level
Level
Definition: IMessageSvc.h:25
std::endl
T endl(T... args)
MSG::ALWAYS
@ ALWAYS
Definition: IMessageSvc.h:25
MSG::NIL
@ NIL
Definition: IMessageSvc.h:25
Properties.v
v
Definition: Properties.py:122
std::ostringstream::str
T str(T... args)
std::ostringstream::unsetf
T unsetf(T... args)
MSG::NUM_LEVELS
@ NUM_LEVELS
Definition: IMessageSvc.h:25
MsgStream::setLevel
void setLevel(int level)
Update outputlevel.
Definition: MsgStream.h:107
MsgStream::m_inactCounter
IInactiveMessageCounter * m_inactCounter
Pointer to service counting messages prepared but not printed because of wrong level.
Definition: MsgStream.h:60
MsgStream::activate
void activate()
Activate MsgStream.
Definition: MsgStream.h:116
IInactiveMessageCounter::incrInactiveCount
virtual void incrInactiveCount(MSG::Level level, std::string_view src)=0
Increment deactivated message count.
MsgStream::isActive
bool isActive() const
Accessor: is MsgStream active.
Definition: MsgStream.h:120
MsgStream::level
MSG::Level level() const
Retrieve output level.
Definition: MsgStream.h:112
std::ostringstream::eof
T eof(T... args)
std::ostringstream::precision
T precision(T... args)
MsgStream::m_countInactive
static bool m_countInactive
Flag to state if the inactive messages has to be counted.
Definition: MsgStream.h:62
MsgStream::countInactive
static GAUDI_API bool countInactive()
Returns the state of the counting of inactive messages (enabled/disabled).
Definition: MsgStream.cpp:47