#pragma once #include "CriticalSection.h" #include "Log Class.h" class CTraceModule { TraceLevel m_Type; public: CTraceModule () { m_Type = TrLvError; } virtual ~CTraceModule () {} inline void SetTraceLevel ( TraceLevel Type ) { m_Type = Type; } inline TraceLevel GetTraceLevel ( void ) const { return m_Type; } virtual void Write ( const char * Message, bool EndOfLine ) = 0; }; class CTraceFileLog : public CTraceModule { enum { MB = 1024 * 1024 }; CriticalSection m_CriticalSection; CLog m_hLogFile; bool m_FlushFile; public: CTraceFileLog (const char * FileName, bool FlushFile = true); CTraceFileLog(const char * FileName, bool FlushFile, LOG_OPEN_MODE eMode, size_t dwMaxFileSize = 5); virtual ~CTraceFileLog (); void Write ( const char * Message, bool EndOfLine ); void SetFlushFile ( bool bFlushFile ); }; class CDebugTraceLog : public CTraceModule { public: void Write ( const char * Message, bool EndOfLine ); }; CTraceModule * AddTraceModule ( CTraceModule * TraceModule ); // Must be created with new CTraceModule * RemoveTraceModule ( CTraceModule * TraceModule ); // Is not automaticly deleted