Message Class Referencefinal

The Message class. More...

#include <GaudiKernel/Message.h>

Collaboration diagram for Message:

Public Member Functions

 Message ()
 Default constructor. More...
 
 Message (const char *src, int type, const char *msg)
 Constructor. More...
 
 Message (std::string src, int type, std::string msg)
 Constructor. More...
 
 ~Message ()=default
 Default destructor. More...
 
const std::stringgetMessage () const
 Get the message string. More...
 
void setMessage (std::string msg)
 Set the message string. More...
 
int getType () const
 Get the message type. More...
 
void setType (int msg_type)
 Set the message type. More...
 
const std::stringgetSource () const
 Get the message source. More...
 
void setSource (std::string src)
 Set the message source. More...
 
const std::stringgetFormat () const
 Get the format string. More...
 
void setFormat (std::string msg) const
 Set the format string. More...
 
const std::stringgetTimeFormat () const
 Get the time format string. More...
 
void setTimeFormat (std::string timeFormat) const
 Set the time format string. More...
 
bool operator< (const Message &test)
 Needed to build maps. More...
 

Static Public Member Functions

static const std::string getDefaultFormat ()
 Get the default format string. More...
 
static const std::string getDefaultTimeFormat ()
 Get the default time format string. More...
 

Private Member Functions

void invalidFormat () const
 Called when an invalid format string is encountered. More...
 
void makeFormattedMsg (const std::string &format) const
 Format the message. More...
 
void decodeFormat (const std::string &format) const
 Decode format. More...
 
void sizeField (const std::string &text) const
 Truncate or pad the output string to the field width as necessary. More...
 
void setWidth (const std::string &formatArg) const
 Set the width of a stream. More...
 

Private Attributes

std::string m_message
 The message. More...
 
std::string m_source = "UNKNOWN"
 The source. More...
 
std::string m_format = DEFAULT_FORMAT
 The format string. More...
 
std::string m_time_format = DEFAULT_TIME_FORMAT
 Time format string. More...
 
int m_type = 0
 The type. More...
 
std::string m_formatted_msg
 Formatted message. More...
 
char m_fill = ' '
 The current fill character. More...
 
int m_width = 0
 The current field width. More...
 
bool m_left = true
 Justification. More...
 
size_t m_ecSlot
 
long int m_ecEvt
 
pthread_t m_ecThrd
 

Static Private Attributes

static const char FORMAT_PREFIX = '%'
 Formatting string characters. More...
 
static const char JUSTIFY_LEFT = 'L'
 The character used to indicate start of left text justification. More...
 
static const char JUSTIFY_RIGHT = 'R'
 The character used to indicate start of right text justification. More...
 
static const char MESSAGE = 'M'
 The character used to indicate that the message should be printed. More...
 
static const char TYPE = 'T'
 The character used to indicate that the message type should be printed. More...
 
static const char TIME = 't'
 The character used to indicate that the message timestamp should be printed. More...
 
static const char UTIME = 'u'
 The character used to indicate that the message timestamp should be printed in UTC time. More...
 
static const char SOURCE = 'S'
 The character used to indicate that the message source should be printed. More...
 
static const char FILL = 'F'
 The character used to indicate that the previous character is to be used for padding out fields if the text is not long enough. More...
 
static const char WIDTH = 'W'
 The character used to indicate that the previous decimal characters should be taken as the field width. More...
 
static constexpr const char * DEFAULT_FORMAT = "% F%18W%S%7W%R%T %0W%M"
 The default message format. More...
 
static constexpr const char * DEFAULT_TIME_FORMAT = "%Y-%m-%d %H:%M:%S,%f"
 The default time format. More...
 
static const char SLOT = 's'
 For slot and event number from EventContext. More...
 
static const char EVTNUM = 'e'
 
static const char THREAD = 'X'
 

Friends

std::ostreamoperator<< (std::ostream &stream, const Message &msg)
 Insert the message into a stream. More...
 
bool operator== (const Message &a, const Message &b)
 Insert the message into a stream. More...
 

Detailed Description

The Message class.

This class is used to contain messages which can then be formatted and sent to a message service

Author
Iain Last

Definition at line 15 of file Message.h.

Constructor & Destructor Documentation

Message::Message ( )

Default constructor.

Definition at line 30 of file Message.cpp.

31 {
34  m_ecThrd = pthread_self();
35 }
size_t m_ecSlot
Definition: Message.h:171
long int m_ecEvt
Definition: Message.h:172
GAUDI_API ContextIdType currentContextId()
Return the current context id.
GAUDI_API ContextIdType currentContextEvt()
pthread_t m_ecThrd
Definition: Message.h:173
Message::Message ( const char *  src,
int  type,
const char *  msg 
)

Constructor.

Definition at line 43 of file Message.cpp.

43  :
44  m_message( msg ), m_source( src ), m_type( type )
45 {
48  m_ecThrd = pthread_self();
49 }
size_t m_ecSlot
Definition: Message.h:171
long int m_ecEvt
Definition: Message.h:172
GAUDI_API ContextIdType currentContextId()
Return the current context id.
std::string m_message
The message.
Definition: Message.h:92
GAUDI_API ContextIdType currentContextEvt()
pthread_t m_ecThrd
Definition: Message.h:173
std::string m_source
The source.
Definition: Message.h:95
int m_type
The type.
Definition: Message.h:104
Message::Message ( std::string  src,
int  type,
std::string  msg 
)

Constructor.

Definition at line 57 of file Message.cpp.

57  :
58  m_message( std::move(msg) ), m_source( std::move(src) ), m_type( type )
59 {
62  m_ecThrd = pthread_self();
63 }
size_t m_ecSlot
Definition: Message.h:171
long int m_ecEvt
Definition: Message.h:172
GAUDI_API ContextIdType currentContextId()
Return the current context id.
std::string m_message
The message.
Definition: Message.h:92
T move(T...args)
GAUDI_API ContextIdType currentContextEvt()
pthread_t m_ecThrd
Definition: Message.h:173
std::string m_source
The source.
Definition: Message.h:95
int m_type
The type.
Definition: Message.h:104
Message::~Message ( )
default

Default destructor.

Member Function Documentation

void Message::decodeFormat ( const std::string format) const
private

Decode format.

Definition at line 292 of file Message.cpp.

293 {
294  if ( ! format.empty() ) {
295  const char FORMAT_TYPE = format[ format.length() - 1 ];
296  const std::string FORMAT_PARAM = format.substr( 0, format.length() - 1 );
297 
298  // Now test the format.
300  switch( FORMAT_TYPE ) {
301  case FILL:
302  if ( FORMAT_PARAM.length() == 1 ) {
303  m_fill = FORMAT_PARAM[0];
304  }
305  else
306  invalidFormat();
307  break;
308 
309  case TIME:
310  {
311  sizeField( formattedTime ( m_time_format ) );
312  }
313  break;
314 
315  case UTIME:
316  {
317  sizeField( formattedTime ( m_time_format, true ) );
318  }
319  break;
320 
321  case THREAD:
322  {
323  std::ostringstream ost;
324  // ost << "0x" << std::hex << pthread_self();
325  ost << "0x" << std::hex << m_ecThrd;
326  const std::string& thrStr( ost.str() );
327  sizeField( thrStr );
328  }
329  break;
330 
331  case SLOT:
332  {
333  if (m_ecEvt >= 0) {
334  std::ostringstream ost;
335  ost << m_ecSlot;
336  const std::string& slotStr (ost.str());
337  sizeField( slotStr );
338  } else {
339  const std::string& slotStr( "" );
340  sizeField( slotStr );
341  }
342  }
343  break;
344 
345  case EVTNUM:
346  {
347  if (m_ecEvt >= 0 ) {
348  std::ostringstream ost;
349  ost << m_ecEvt;
350  const std::string& slotStr (ost.str());
351  sizeField( slotStr );
352  } else {
353  const std::string& slotStr( "" );
354  sizeField( slotStr );
355  }
356  }
357  break;
358 
359  case MESSAGE:
360  sizeField( m_message );
361  break;
362 
363  case SOURCE:
364  sizeField( m_source );
365  break;
366 
367  case TYPE:
368  switch ( m_type ) {
369 #define SET(x) case x: level=#x; break
370  SET( NIL );
371  SET( VERBOSE );
372  SET( DEBUG );
373  SET( INFO );
374  SET( WARNING );
375  SET( ERROR );
376  SET( FATAL );
377  case ALWAYS: level="SUCCESS"; break;
378  default:
379  level = "UNKNOWN";
380  break;
381 #undef SET
382  }
383  sizeField( level );
384  break;
385 
387  case JUSTIFY_RIGHT: m_left = false; break;
388  case JUSTIFY_LEFT: m_left = true; break;
389  case WIDTH: setWidth( FORMAT_PARAM ); break;
390  default: invalidFormat(); break;
391  }
392  }
393  else
394  invalidFormat();
395 }
size_t m_ecSlot
Definition: Message.h:171
long int m_ecEvt
Definition: Message.h:172
static const char TYPE
The character used to indicate that the message type should be printed.
Definition: Message.h:133
bool m_left
Justification.
Definition: Message.h:116
static const char MESSAGE
The character used to indicate that the message should be printed.
Definition: Message.h:130
char m_fill
The current fill character.
Definition: Message.h:110
static const char JUSTIFY_LEFT
The character used to indicate start of left text justification.
Definition: Message.h:124
T empty(T...args)
std::string m_formatted_msg
Formatted message.
Definition: Message.h:107
static const char THREAD
Definition: Message.h:169
std::string m_time_format
Time format string.
Definition: Message.h:101
void setWidth(const std::string &formatArg) const
Set the width of a stream.
Definition: Message.cpp:429
std::string m_message
The message.
Definition: Message.h:92
#define SET(x)
void invalidFormat() const
Called when an invalid format string is encountered.
Definition: Message.cpp:404
STL class.
static const char EVTNUM
Definition: Message.h:168
static const char TIME
The character used to indicate that the message timestamp should be printed.
Definition: Message.h:136
T length(T...args)
static const char JUSTIFY_RIGHT
The character used to indicate start of right text justification.
Definition: Message.h:127
static const char UTIME
The character used to indicate that the message timestamp should be printed in UTC time...
Definition: Message.h:140
static const char SLOT
For slot and event number from EventContext.
Definition: Message.h:167
pthread_t m_ecThrd
Definition: Message.h:173
static const char FILL
The character used to indicate that the previous character is to be used for padding out fields if th...
Definition: Message.h:148
T hex(T...args)
T substr(T...args)
void sizeField(const std::string &text) const
Truncate or pad the output string to the field width as necessary.
Definition: Message.cpp:443
static const char FORMAT_PREFIX
Formatting string characters.
Definition: Message.h:121
std::string m_source
The source.
Definition: Message.h:95
static const char WIDTH
The character used to indicate that the previous decimal characters should be taken as the field widt...
Definition: Message.h:153
static const char SOURCE
The character used to indicate that the message source should be printed.
Definition: Message.h:143
int m_type
The type.
Definition: Message.h:104
const std::string Message::getDefaultFormat ( )
static

Get the default format string.

Definition at line 187 of file Message.cpp.

188 {
189  return DEFAULT_FORMAT;
190 }
static constexpr const char * DEFAULT_FORMAT
The default message format.
Definition: Message.h:160
const std::string Message::getDefaultTimeFormat ( )
static

Get the default time format string.

Definition at line 226 of file Message.cpp.

227 {
228  return DEFAULT_TIME_FORMAT ;
229 }
static constexpr const char * DEFAULT_TIME_FORMAT
The default time format.
Definition: Message.h:164
const std::string & Message::getFormat ( ) const

Get the format string.

Definition at line 176 of file Message.cpp.

177 {
178  return m_format;
179 }
std::string m_format
The format string.
Definition: Message.h:98
const std::string & Message::getMessage ( ) const

Get the message string.

Definition at line 71 of file Message.cpp.

72 {
73  return m_message;
74 }
std::string m_message
The message.
Definition: Message.h:92
const std::string & Message::getSource ( ) const

Get the message source.

Definition at line 115 of file Message.cpp.

116 {
117  return m_source;
118 }
std::string m_source
The source.
Definition: Message.h:95
const std::string & Message::getTimeFormat ( ) const

Get the time format string.

Definition at line 215 of file Message.cpp.

216 {
217  return m_time_format;
218 }
std::string m_time_format
Time format string.
Definition: Message.h:101
int Message::getType ( ) const

Get the message type.

Definition at line 93 of file Message.cpp.

94 {
95  return m_type;
96 }
int m_type
The type.
Definition: Message.h:104
void Message::invalidFormat ( ) const
private

Called when an invalid format string is encountered.

Definition at line 404 of file Message.cpp.

405 {
407 }
void makeFormattedMsg(const std::string &format) const
Format the message.
Definition: Message.cpp:251
static constexpr const char * DEFAULT_FORMAT
The default message format.
Definition: Message.h:160
void Message::makeFormattedMsg ( const std::string format) const
private

Format the message.

Definition at line 251 of file Message.cpp.

252 {
254  auto i = format.begin();
255  while( i != format.end() ) {
256 
257  // Output format string until format statement found.
258  while( i != format.end() && *i != FORMAT_PREFIX )
259  m_formatted_msg += *i++;
260 
261  // Test for end of format string.
262  if ( i == format.end() ) break;
263  i++;
264 
265  // Find type of formatting.
266  std::string this_format;
267  while( i != format.end() && *i != FORMAT_PREFIX &&
268  *i != MESSAGE && *i != TYPE && *i != SOURCE &&
269  *i != FILL && *i != WIDTH && *i != TIME && *i != UTIME &&
270  *i != SLOT && *i != EVTNUM && *i != THREAD &&
271  *i != JUSTIFY_LEFT && *i != JUSTIFY_RIGHT ) {
272  this_format += *i++;
273  }
274 
275  // Reached end of string with improper format.
276  if ( i == format.end() ) {
277  invalidFormat();
278  break;
279  }
280 
281  this_format += *i++;
282  decodeFormat( this_format );
283  }
284 }
static const char TYPE
The character used to indicate that the message type should be printed.
Definition: Message.h:133
static const char MESSAGE
The character used to indicate that the message should be printed.
Definition: Message.h:130
static const char JUSTIFY_LEFT
The character used to indicate start of left text justification.
Definition: Message.h:124
std::string m_formatted_msg
Formatted message.
Definition: Message.h:107
static const char THREAD
Definition: Message.h:169
void decodeFormat(const std::string &format) const
Decode format.
Definition: Message.cpp:292
T end(T...args)
void invalidFormat() const
Called when an invalid format string is encountered.
Definition: Message.cpp:404
STL class.
static const char EVTNUM
Definition: Message.h:168
T clear(T...args)
static const char TIME
The character used to indicate that the message timestamp should be printed.
Definition: Message.h:136
static const char JUSTIFY_RIGHT
The character used to indicate start of right text justification.
Definition: Message.h:127
static const char UTIME
The character used to indicate that the message timestamp should be printed in UTC time...
Definition: Message.h:140
static const char SLOT
For slot and event number from EventContext.
Definition: Message.h:167
T begin(T...args)
static const char FILL
The character used to indicate that the previous character is to be used for padding out fields if th...
Definition: Message.h:148
static const char FORMAT_PREFIX
Formatting string characters.
Definition: Message.h:121
static const char WIDTH
The character used to indicate that the previous decimal characters should be taken as the field widt...
Definition: Message.h:153
static const char SOURCE
The character used to indicate that the message source should be printed.
Definition: Message.h:143
bool Message::operator< ( const Message test)

Needed to build maps.

Definition at line 150 of file Message.cpp.

151 {
152  return m_type < b.m_type ||
153  m_source < b.m_source ||
154  m_message < b.m_message;
155 }
std::string m_message
The message.
Definition: Message.h:92
std::string m_source
The source.
Definition: Message.h:95
int m_type
The type.
Definition: Message.h:104
void Message::setFormat ( std::string  msg) const

Set the format string.

Definition at line 200 of file Message.cpp.

201 {
202  if (LIKELY(!format.empty())) {
204  } else {
206  }
207 }
T empty(T...args)
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:119
T move(T...args)
std::string m_format
The format string.
Definition: Message.h:98
#define LIKELY(x)
Definition: Kernel.h:125
static constexpr const char * DEFAULT_FORMAT
The default message format.
Definition: Message.h:160
void Message::setMessage ( std::string  msg)

Set the message string.

Definition at line 82 of file Message.cpp.

83 {
84  m_message = std::move(msg);
85 }
std::string m_message
The message.
Definition: Message.h:92
T move(T...args)
void Message::setSource ( std::string  src)

Set the message source.

Definition at line 126 of file Message.cpp.

127 {
128  m_source = std::move(src);
129 }
T move(T...args)
std::string m_source
The source.
Definition: Message.h:95
void Message::setTimeFormat ( std::string  timeFormat) const

Set the time format string.

Definition at line 239 of file Message.cpp.

240 {
241  m_time_format = ( timeFormat.empty() ? DEFAULT_TIME_FORMAT
242  : std::move(timeFormat) );
243 }
T empty(T...args)
std::string m_time_format
Time format string.
Definition: Message.h:101
T move(T...args)
static constexpr const char * DEFAULT_TIME_FORMAT
The default time format.
Definition: Message.h:164
void Message::setType ( int  msg_type)

Set the message type.

Definition at line 104 of file Message.cpp.

105 {
106  m_type = msg_type;
107 }
int m_type
The type.
Definition: Message.h:104
void Message::setWidth ( const std::string formatArg) const
private

Set the width of a stream.

Definition at line 429 of file Message.cpp.

430 {
431  // Convert string to int, if string contains digits only...
432  if ( all_digits(formatArg) ) m_width = std::stoi(formatArg);
433  else invalidFormat();
434 }
void invalidFormat() const
Called when an invalid format string is encountered.
Definition: Message.cpp:404
int m_width
The current field width.
Definition: Message.h:113
T stoi(T...args)
void Message::sizeField ( const std::string text) const
private

Truncate or pad the output string to the field width as necessary.

Definition at line 443 of file Message.cpp.

444 {
445  std::string newText;
446  if ( m_width == 0 || m_width == static_cast<int>( text.length() ) ) {
447  newText = text;
448  }
449  else {
450 
451  // Truncate the text if it is too long.
452  if ( m_width < static_cast<int>( text.length() ) ) {
453  newText = text.substr( 0, m_width );
454  for ( int i = 0, j = newText.length()-1; i < 3 && j >= 0; ++i, --j )
455  newText[ j ] = '.';
456  }
457 
458  // Pad the text.
459  else {
460  newText = std::string( m_width, m_fill );
461  if ( m_left )
462  newText.replace( newText.begin(), newText.begin() + text.length(),
463  text.begin(), text.end() );
464  else
465  newText.replace( newText.end() - text.length(), newText.end(),
466  text.begin(), text.end() );
467  }
468  }
469 
470  m_formatted_msg += newText;
471 }
bool m_left
Justification.
Definition: Message.h:116
char m_fill
The current fill character.
Definition: Message.h:110
std::string m_formatted_msg
Formatted message.
Definition: Message.h:107
T end(T...args)
STL class.
T replace(T...args)
int m_width
The current field width.
Definition: Message.h:113
T length(T...args)
T begin(T...args)
T substr(T...args)

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream stream,
const Message msg 
)
friend

Insert the message into a stream.

Definition at line 137 of file Message.cpp.

138 {
139  msg.makeFormattedMsg( msg.m_format );
140  stream << msg.m_formatted_msg;
141  return stream;
142 }
std::string m_formatted_msg
Formatted message.
Definition: Message.h:107
std::string m_format
The format string.
Definition: Message.h:98
void makeFormattedMsg(const std::string &format) const
Format the message.
Definition: Message.cpp:251
bool operator== ( const Message a,
const Message b 
)
friend

Insert the message into a stream.

Definition at line 163 of file Message.cpp.

164 {
165  return a.m_source == b.m_source &&
166  a.m_type == b.m_type &&
167  a.m_message == b.m_message;
168 }
std::string m_message
The message.
Definition: Message.h:92
std::string m_source
The source.
Definition: Message.h:95
int m_type
The type.
Definition: Message.h:104

Member Data Documentation

constexpr const char* Message::DEFAULT_FORMAT = "% F%18W%S%7W%R%T %0W%M"
staticprivate

The default message format.

Definition at line 160 of file Message.h.

constexpr const char* Message::DEFAULT_TIME_FORMAT = "%Y-%m-%d %H:%M:%S,%f"
staticprivate

The default time format.

Definition at line 164 of file Message.h.

const char Message::EVTNUM = 'e'
staticprivate

Definition at line 168 of file Message.h.

const char Message::FILL = 'F'
staticprivate

The character used to indicate that the previous character is to be used for padding out fields if the text is not long enough.

Definition at line 148 of file Message.h.

const char Message::FORMAT_PREFIX = '%'
staticprivate

Formatting string characters.

The character used to prefix formatting commands.

Definition at line 121 of file Message.h.

const char Message::JUSTIFY_LEFT = 'L'
staticprivate

The character used to indicate start of left text justification.

Definition at line 124 of file Message.h.

const char Message::JUSTIFY_RIGHT = 'R'
staticprivate

The character used to indicate start of right text justification.

Definition at line 127 of file Message.h.

long int Message::m_ecEvt
private

Definition at line 172 of file Message.h.

size_t Message::m_ecSlot
private

Definition at line 171 of file Message.h.

pthread_t Message::m_ecThrd
private

Definition at line 173 of file Message.h.

char Message::m_fill = ' '
mutableprivate

The current fill character.

Definition at line 110 of file Message.h.

std::string Message::m_format = DEFAULT_FORMAT
mutableprivate

The format string.

Definition at line 98 of file Message.h.

std::string Message::m_formatted_msg
mutableprivate

Formatted message.

Definition at line 107 of file Message.h.

bool Message::m_left = true
mutableprivate

Justification.

Definition at line 116 of file Message.h.

std::string Message::m_message
private

The message.

Definition at line 92 of file Message.h.

std::string Message::m_source = "UNKNOWN"
private

The source.

Definition at line 95 of file Message.h.

std::string Message::m_time_format = DEFAULT_TIME_FORMAT
mutableprivate

Time format string.

Definition at line 101 of file Message.h.

int Message::m_type = 0
private

The type.

Definition at line 104 of file Message.h.

int Message::m_width = 0
mutableprivate

The current field width.

Definition at line 113 of file Message.h.

const char Message::MESSAGE = 'M'
staticprivate

The character used to indicate that the message should be printed.

Definition at line 130 of file Message.h.

const char Message::SLOT = 's'
staticprivate

For slot and event number from EventContext.

Definition at line 167 of file Message.h.

const char Message::SOURCE = 'S'
staticprivate

The character used to indicate that the message source should be printed.

Definition at line 143 of file Message.h.

const char Message::THREAD = 'X'
staticprivate

Definition at line 169 of file Message.h.

const char Message::TIME = 't'
staticprivate

The character used to indicate that the message timestamp should be printed.

Definition at line 136 of file Message.h.

const char Message::TYPE = 'T'
staticprivate

The character used to indicate that the message type should be printed.

Definition at line 133 of file Message.h.

const char Message::UTIME = 'u'
staticprivate

The character used to indicate that the message timestamp should be printed in UTC time.

Definition at line 140 of file Message.h.

const char Message::WIDTH = 'W'
staticprivate

The character used to indicate that the previous decimal characters should be taken as the field width.

Definition at line 153 of file Message.h.


The documentation for this class was generated from the following files: