//////////////////////////////////////////////////////////////////////////////// // / // 2012-2020 (c) Baical / // / // This library is free software; you can redistribute it and/or / // modify it under the terms of the GNU Lesser General Public / // License as published by the Free Software Foundation; either / // version 3.0 of the License, or (at your option) any later version. / // / // This library is distributed in the hope that it will be useful, / // but WITHOUT ANY WARRANTY; without even the implied warranty of / // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU / // Lesser General Public License for more details. / // / // You should have received a copy of the GNU Lesser General Public / // License along with this library. / // / //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // This header file describes interface for text sink / //////////////////////////////////////////////////////////////////////////////// #ifndef CLTEXTSINK_H #define CLTEXTSINK_H //////////////////////////////////////////////////////////////////////////////// struct sTraceDesc { tUINT16 wLine; tXCHAR *pFilePath; size_t szFilePath; const tXCHAR *pFileName; //pointer to pFile_Path size_t szFileName; tXCHAR *pFunction; size_t szFunction; tUINT32 dwModuleID; //module ID when trace description was created sTraceDesc() : wLine(0) , pFilePath(NULL) , szFilePath(0) , pFileName(NULL) , szFileName(0) , pFunction(NULL) , szFunction(0) , dwModuleID(0) { } }; //////////////////////////////////////////////////////////////////////////////// class CClTextSink { public: struct sLog { const tXCHAR *pChannel; //channel name size_t szChannel; //channel name length tUINT64 qwIndex; //log item index (per channel) tUINT32 dwId; //log item ID (per channel) tUINT32 dwYear; //year tUINT32 dwMonth; //month tUINT32 dwDay; //day tUINT32 dwHour; //hour tUINT32 dwMinutes; //minute tUINT32 dwSeconds; //seconds tUINT32 dwMilliseconds; //milliseconds tUINT32 dwMicroseconds; //microseconds tUINT32 dwNanoseconds; //nanoseconds tUINT64 qwRawTime; //number of 100-nanosecond intervals since 01.01.1601 (UTC) tUINT64 qwRawTimeOffset; //offset of 100-nanosecond intervals since prev. item eP7Trace_Level eLevel; //log item level tUINT32 dwModuleID; //module ID for current trace item const tXCHAR *pModuleName; //module name size_t szModuleName; //module name length tUINT32 dwCpuCore; //current CPU core number tUINT32 dwThreadId; //thread ID const tXCHAR *pThreadName; //thread name size_t szThreadName; //thread name length sTraceDesc *pDesc; //log item description const tXCHAR *pMessage; //log item message size_t szMessage; //log item message length }; CClTextSink() {} virtual ~CClTextSink() {} virtual eClient_Status Initialize(tXCHAR **i_pArgs, tINT32 i_iCount) = 0; virtual eClient_Status Log(const CClTextSink::sLog &i_rRawLog, const tXCHAR *i_pFmtLog, size_t i_szFmtLog ) = 0; virtual eClient_Status TryRoll() { return ECLIENT_STATUS_OK; } virtual eClient_Status DumpBuffers() = 0; }; #endif //CLTEXTSINK_H