00001 #ifndef EDG_WORKLOAD_COMMON_LOGGER_LOGSTREAM_H
00002 #define EDG_WORKLOAD_COMMON_LOGGER_LOGSTREAM_H
00003
00004 #include <iostream>
00005 #include <string>
00006
00007 #include "logbuf.h"
00008
00009 COMMON_NAMESPACE_BEGIN {
00010
00011 namespace logger {
00012
00013 namespace threadsafe { class logstream; };
00014
00015 class logbase_c : public std::ostream {
00016 friend class threadsafe::logstream;
00017
00018 public:
00019 logbase_c( void );
00020 logbase_c( const char *name, level_t lev, const char *format );
00021 logbase_c( const std::string &name, level_t lev, const char *format );
00022 logbase_c( std::ostream &ostr, level_t lev, const char *format );
00023
00024 virtual ~logbase_c( void );
00025
00026
00027 inline logbase_c &show_severity( bool show ) { this->lb_buffer.show_severity( show ); return *this; }
00028 inline logbase_c &next_level( level_t lev ) { this->lb_buffer.next_level( lev ); return *this; }
00029 inline logbase_c ¤t_level( level_t lev ) { this->lb_buffer.buffer_level( lev ); return *this; }
00030 inline logbase_c &function( const char *func ) { this->lb_buffer.function( func ); return *this; }
00031 inline logbase_c &time_format( const char *format ) { this->lb_buffer.time_format( format ); return *this; }
00032 inline logbase_c &clear_function( void ) { this->lb_buffer.clear_function(); return *this; }
00033 inline logbase_c &reset_container( DataContainerImpl *dc ) { this->lb_buffer.reset_container( dc ); return *this; }
00034
00035 void close( void );
00036 void open( const char *name, level_t lev = medium, const char *format = data_c::bd_s_timeFormat );
00037 void open( const std::string &name, level_t lev = medium, const char *format = data_c::bd_s_timeFormat );
00038 void open( std::ostream &name, level_t lev = medium, const char *format = data_c::bd_s_timeFormat );
00039
00040 inline void activate_log_rotation( std::streamsize maxsize, const std::string &basename, unsigned int maxfiles )
00041 { this->lb_buffer.activate_log_rotation( maxsize, basename, maxfiles ); }
00042 inline void deactivate_log_rotation( void ) { this->lb_buffer.deactivate_log_rotation(); }
00043 inline void log_rotate( void ) { this->lb_buffer.log_rotate(); }
00044
00045 protected:
00046 inline DataContainerImpl *container( void ) { return this->lb_buffer.container(); }
00047
00048 mutable Logbuf lb_buffer;
00049
00050 private:
00051 logbase_c &operator=( const logbase_c &lb );
00052 logbase_c( const logbase_c &lb );
00053 };
00054
00055 class logstream : public logbase_c {
00056 friend class threadsafe::logstream;
00057
00058 public:
00059 logstream( void );
00060 logstream( const char *name, level_t lev = medium, const char *format = data_c::bd_s_timeFormat );
00061 logstream( const std::string &name, level_t lev = medium, const char *format = data_c::bd_s_timeFormat );
00062 logstream( std::ostream &ostr, level_t lev = medium, const char *format = data_c::bd_s_timeFormat );
00063
00064 virtual ~logstream( void );
00065
00066 inline void reset( std::ostream &ostr, level_t lev = medium, const char *format = data_c::bd_s_timeFormat )
00067 { this->open( ostr, lev, format ); }
00068
00069 logstream &attach_to( logstream &ls );
00070 };
00071
00072 extern logstream cedglog;
00073
00074 #define RenameLogStreamNS( log ) namespace log = edg::workload::common::logger
00075
00076 };
00077
00078 } COMMON_NAMESPACE_END;
00079
00080 #endif
00081
00082
00083
00084