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 #ifndef CEYLAN_LOG_AGGREGATOR_H_
00028 #define CEYLAN_LOG_AGGREGATOR_H_
00029
00030
00031 #include "CeylanTextDisplayable.h"
00032 #include "CeylanLog.h"
00033
00034
00035 #include <string>
00036 #include <list>
00037
00038
00039
00040 namespace Ceylan
00041 {
00042
00043
00044 namespace Log
00045 {
00046
00047
00048
00049 class LogChannel ;
00050
00051
00057 class ObjectChannel ;
00058
00059
00060
00061 class LogMessage ;
00062
00063
00064
00084 class CEYLAN_DLL LogAggregator : public TextDisplayable
00085 {
00086
00087
00088 public:
00089
00090
00092 class LogAggregatorException : public LogException
00093 {
00094 public:
00095
00096 explicit LogAggregatorException(
00097 const std::string & message ) ;
00098
00099 virtual ~LogAggregatorException() throw() ;
00100
00101 } ;
00102
00103
00104
00125 explicit LogAggregator( bool useGlobalLevelOfDetail = true,
00126 bool beSmart = true ) ;
00127
00128
00130 virtual ~LogAggregator() throw() ;
00131
00132
00133
00139 virtual LogChannel & createBasicChannel(
00140 const std::string & channelName ) ;
00141
00142
00143
00148 virtual ObjectChannel & createObjectChannel(
00149 LogMessage & message ) ;
00150
00151
00152
00160 virtual void aggregate() = 0 ;
00161
00162
00163
00172 virtual bool hasChannel( const std::string & channelName )
00173 const ;
00174
00175
00176
00189 virtual LogChannel * findChannel(
00190 const std::string & channelName ) const ;
00191
00192
00193
00208 virtual void transferChannel( LogChannel & source,
00209 LogChannel & target ) ;
00210
00211
00212
00214 virtual void removeChannel( LogChannel & target ) ;
00215
00216
00217
00226 virtual void store( LogMessage & message ) ;
00227
00228
00229
00241 virtual const std::string toString(
00242 Ceylan::VerbosityLevels level = Ceylan::high ) const ;
00243
00244
00245
00247 static const LevelOfDetail DefaultGlobalLevelOfDetail ;
00248
00249
00250
00251
00252 protected:
00253
00254
00266 virtual LogChannel * findBasicChannel(
00267 const std::string & basicChannelName ) const ;
00268
00269
00270
00284 virtual ObjectChannel * findObjectChannel(
00285 const std::string & nonPrefixedChannelName ) const ;
00286
00287
00288
00295 virtual void createBasicChannelFrom( LogMessage & message ) ;
00296
00297
00298
00316 virtual void createLoggableChannelFrom( LogMessage & message ) ;
00317
00318
00319
00329 virtual void storeBasicMessage( LogMessage & basicLogMessage ) ;
00330
00331
00332
00342 virtual void storeObjectMessage(
00343 LogMessage & objectLogMessage ) ;
00344
00345
00346
00352 virtual void demangle( LogMessage & objectLogMessage ) ;
00353
00354
00355
00365 virtual Ceylan::VerbosityLevels
00366 getOverallVerbosityLevel() const ;
00367
00368
00378 virtual Ceylan::VerbosityLevels getMessageVerbosityLevel(
00379 const LogMessage & message ) const ;
00380
00381
00382
00388 static Ceylan::VerbosityLevels
00389 ConvertListenerLevelOfDetailToVerbosityLevel(
00390 LevelOfDetail level ) ;
00391
00392
00398 static Ceylan::VerbosityLevels
00399 ConvertMessageLevelOfDetailToVerbosityLevel(
00400 LevelOfDetail level ) ;
00401
00402
00403 #pragma warning( push )
00404 #pragma warning( disable : 4251 )
00405
00407 std::list<LogChannel *> _channelList ;
00408
00409 #pragma warning( pop )
00410
00411
00417 bool _beSmart ;
00418
00419
00427 bool _useGlobalLevelOfDetail ;
00428
00429
00435 LevelOfDetail _globalLevelOfDetail ;
00436
00437
00438
00439 private:
00440
00441
00450 LogAggregator( const LogAggregator & source ) ;
00451
00452
00461 LogAggregator & operator = ( const LogAggregator & source ) ;
00462
00463
00464
00465 } ;
00466
00467
00468 }
00469
00470
00471 }
00472
00473
00474 #endif // CEYLAN_LOG_AGGREGATOR_H_
00475