00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "CeylanLogMessage.h"
00028
00029 #include "CeylanTimestamp.h"
00030 #include "CeylanStringUtils.h"
00031 #include "CeylanOperators.h"
00032 #include "CeylanLogLight.h"
00033
00034
00035 #ifdef CEYLAN_USES_CONFIG_H
00036 #include "CeylanConfig.h"
00037 #endif // CEYLAN_USES_CONFIG_H
00038
00039
00040 #include <list>
00041
00042 using std::string ;
00043
00044 using namespace Ceylan ;
00045 using namespace Ceylan::Log ;
00046
00047
00048
00049 LogMessage::LogMessage( const string & message,
00050 const string & channelName,
00051 LevelOfDetail levelOfDetail,
00052 const Timestamp & timestamp ) :
00053 _message( message ),
00054 _channelName( channelName ),
00055 _levelOfDetail( levelOfDetail ),
00056 _timestamp( & timestamp )
00057 {
00058
00059 CEYLAN_LOG( "Creating log message " + Ceylan::toString( this )
00060 + ": '" + message + "' in " + channelName ) ;
00061
00062 }
00063
00064
00065
00066 LogMessage::LogMessage( const string & message,
00067 const string & channelName,
00068 LevelOfDetail levelOfDetail ) :
00069 _message( message ),
00070 _channelName( channelName ),
00071 _levelOfDetail( levelOfDetail )
00072 {
00073
00074 CEYLAN_LOG( "Creating log message " + Ceylan::toString( this )
00075 + ": '" + message + "' in " + channelName ) ;
00076
00077
00078 try
00079 {
00080
00081 _timestamp = new Timestamp() ;
00082
00083 }
00084 catch( const UtilsException & e )
00085 {
00086
00087 throw LogException(
00088 "LogMessage::LogMessage: unable to generate time-stamp: "
00089 + e.toString() ) ;
00090
00091 }
00092
00093 }
00094
00095
00096
00097 LogMessage::~LogMessage() throw()
00098 {
00099
00100 CEYLAN_LOG( "Deleting log message " + Ceylan::toString( this ) ) ;
00101
00102 if ( _timestamp != 0 )
00103 delete _timestamp ;
00104
00105 }
00106
00107
00108
00109 const std::string LogMessage::getContent() const
00110 {
00111
00112 return _message ;
00113
00114 }
00115
00116
00117
00118 const std::string LogMessage::getChannelName() const
00119 {
00120
00121 return _channelName ;
00122
00123 }
00124
00125
00126
00127 void LogMessage::setChannelName( const string & newChannelName )
00128 {
00129
00130 _channelName = newChannelName ;
00131
00132 }
00133
00134
00135
00136 LevelOfDetail LogMessage::getLevelOfDetail() const
00137 {
00138
00139 return _levelOfDetail ;
00140
00141 }
00142
00143
00144
00145 const Timestamp & LogMessage::getTimestamp() const
00146 {
00147
00148 #if CEYLAN_DEBUG
00149
00150 if ( _timestamp == 0 )
00151 throw LogException(
00152 "LogMessage::getTimestamp failed: no timestamp available." ) ;
00153
00154 #endif // CEYLAN_DEBUG
00155
00156 return * _timestamp ;
00157
00158 }
00159
00160
00161
00162 const string LogMessage::getPreformattedText() const
00163 {
00164
00165 #if CEYLAN_DEBUG
00166
00167 if ( _timestamp == 0 )
00168 return "Error: LogMessage whose content is "
00169 + _message
00170 + ", whose level of detail is "
00171 + Ceylan::toNumericalString( _levelOfDetail )
00172 + " does not have a timestamp, whereas it should." ;
00173
00174 #endif // CEYLAN_DEBUG
00175
00176 return _timestamp->toString() + " " + _message ;
00177
00178 }
00179
00180
00181
00182 const string LogMessage::toString( Ceylan::VerbosityLevels level ) const
00183 {
00184
00185 #if CEYLAN_DEBUG
00186
00187 if ( _timestamp == 0 )
00188 return "Error: LogMessage whose content is "
00189 + _message
00190 + ", whose level of detail is "
00191 + Ceylan::toNumericalString( _levelOfDetail )
00192 + " does not have a timestamp, whereas it should" ;
00193
00194 #endif // CEYLAN_DEBUG
00195
00196
00197
00198 if ( level == Ceylan::low )
00199 {
00200
00201
00202 #if CEYLAN_ARCH_NINTENDO_DS
00203
00204
00205
00206
00207
00208
00209
00210
00211 return _channelName + ": " + _message ;
00212
00213 #else // CEYLAN_ARCH_NINTENDO_DS
00214
00215
00216 return _timestamp->toString() + " [" + _channelName + "] " + _message ;
00217
00218 #endif // CEYLAN_ARCH_NINTENDO_DS
00219
00220 }
00221 else
00222 {
00223
00225
00226 std::list<string> res ;
00227
00228 res.push_back( "targeted at channel: "
00229 + _channelName ) ;
00230
00231 res.push_back( "content: [" + _message + "]" ) ;
00232
00233 res.push_back( "level of detail: "
00234 + Ceylan::toNumericalString( _levelOfDetail ) ) ;
00235
00236 res.push_back( "timestamp: " + _timestamp->toString() ) ;
00237
00238 return "LogMessage: " + formatStringList( res ) ;
00239
00240 }
00241
00242 }
00243