#ifndef __TRACE_H__ #define __TRACE_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 ( LPCTSTR Message, bool EndOfLine ) = 0; }; class CTraceFileLog : public CTraceModule { enum { MB = 1024 * 1024 }; CriticalSection m_CriticalSection; CLog m_hLogFile; bool m_FlushFile; public: CTraceFileLog (LPCTSTR FileName, bool FlushFile = true); CTraceFileLog (LPCTSTR FileName, bool FlushFile, LOG_OPEN_MODE eMode, DWORD dwMaxFileSize = 5 * CTraceFileLog::MB); virtual ~CTraceFileLog (); void Write ( LPCTSTR Message, bool EndOfLine ); void SetFlushFile ( bool bFlushFile ); }; class CDebugTraceLog : public CTraceModule { public: void Write ( LPCTSTR Message, bool EndOfLine ) { OutputDebugString(Message); if (EndOfLine) { OutputDebugString(_T("\n")); } } }; CTraceModule * AddTraceModule ( CTraceModule * TraceModule ); // Must be created with new CTraceModule * RemoveTraceModule ( CTraceModule * TraceModule ); // Is not automaticly deleted #endif // __TRACE_H__