Gaudi Framework, version v20r3

Generated: 24 Nov 2008

MsgStream.cpp

Go to the documentation of this file.
00001 // $Header: /local/reps/Gaudi/GaudiKernel/src/Lib/MsgStream.cpp,v 1.13 2008/10/01 14:39:28 marcocle Exp $
00002 //====================================================================
00003 //      MsgStream.cpp
00004 //--------------------------------------------------------------------
00005 //
00006 //      Package    : System ( The LHCb Offline System)
00007 //
00008 //  Description: Class to ease error logging to the message service
00009 //
00010 //      Author     : M.Frank
00011 //  History    :
00012 // +---------+----------------------------------------------+---------
00013 // |    Date |                 Comment                      | Who     
00014 // +---------+----------------------------------------------+---------
00015 // | 29/10/98| Initial version                              | MF
00016 // +---------+----------------------------------------------+---------
00017 //
00018 //====================================================================
00019 #define KERNEL_MSGSTREAM_CPP
00020 
00021 
00022 #include "GaudiKernel/MsgStream.h"
00023 #include "GaudiKernel/Message.h"
00024 #include "GaudiKernel/GaudiException.h"
00025 #include "GaudiKernel/IMessageSvc.h"
00026 
00027 #include <iostream>
00028 #include <stdarg.h>
00029 #include <stdio.h>
00030 
00031 MsgStream::MsgStream(IMessageSvc* svc, int)
00032 : m_service(svc),
00033   m_source(""),
00034   m_active(false)
00035 {
00036   setLevel((0==svc) ? MSG::INFO : svc->outputLevel());
00037   m_useColors = (0==svc) ? false : svc->useColor();
00038 }
00039 
00040 MsgStream::MsgStream(IMessageSvc* svc, const std::string& source, int)
00041 : m_service(svc),
00042   m_source(source),
00043   m_active(false)
00044 {
00045   setLevel((0==svc) ? MSG::INFO : svc->outputLevel(source));
00046   m_useColors = (0==svc) ? false : svc->useColor();
00047 }
00048 
00049 MsgStream::~MsgStream()    {
00050 }
00051 
00052 MsgStream& MsgStream::doOutput()       {
00053   if ( isActive() )   {
00054     Message msg(m_source,m_currLevel,m_stream.str());
00055     if ( m_service != 0 )   {
00056       m_service->reportMessage (msg, m_currLevel);
00057     }
00058     else     {
00059       std::cout << msg << std::endl;
00060     }
00061   }
00062   
00063   m_stream.str("");
00064   return *this;
00065 }
00066 
00067 void MsgStream::setColor(MSG::Color col) {
00068 #ifndef _WIN32
00069   if ( m_useColors)   {
00070     int fc = 90 + col;
00071     m_stream << "[" << fc << ";1m";
00072   }
00073 #endif
00074 }
00075 
00076 void MsgStream::setColor(MSG::Color fg, MSG::Color bg) {
00077 #ifndef _WIN32
00078   if ( m_useColors )   {
00079     int fc = 90 + fg;
00080     m_stream << "[" << fc;
00081     int bc = 100 + bg;
00082       m_stream << ";" << bc;
00083     m_stream << ";1m";
00084   }
00085 #endif
00086 }
00087 
00088 void MsgStream::resetColor() {
00089 #ifndef _WIN32
00090   if ( m_useColors )   {
00091     m_stream << "" << m_service->getLogColor(m_currLevel);
00092   }
00093 #endif
00094 }
00095 
00096 std::string format( const char* fmt, ... ) 
00097 {
00098   const int buffsize = 2048;
00099   static char buffer[buffsize];
00100   va_list arguments;
00101   va_start( arguments, fmt );
00102   if( vsprintf(buffer, fmt, arguments) >= buffsize )
00103     throw GaudiException("Insufficient buffer size (2048) when formatting message",
00104                          "MsgStream", 0);
00105   return std::string(buffer);
00106 }

Generated at Mon Nov 24 14:38:47 2008 for Gaudi Framework, version v20r3 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004