📄 xlog.h
字号:
//---------------------------------------------------------------------------
#ifndef XLogH
#define XLogH
#include <stdio.h>
#include <SyncObjs.hpp>
#ifndef XDateTimeH
#include <XDateTime.h>
#endif
//---------------------------------------------------------------------------
namespace zdhsoft
{
const int LOG_LEVEL_TRACE = 0;
const int LOG_LEVEL_DEBUG = 1;
const int LOG_LEVEL_INFO = 2;
const int LOG_LEVEL_ERROR = 3;
const int LOG_LEVEL_FATAL = 4;
//---------------------------------------------------------------------------
/*
///////////////////////////////////////////////////////////////////////////////
[Name]XLog
[Title]系统日志类
///////////////////////////////////////////////////////////////////////////////
[Description]
新增了一组方法Debug(const AnsiString &);...
Info(const AnsiString &);...
这样可以直接输出AnsiString类型的数据
新增了三个属性
DateTimeFlag表示是否要输出日期时间
LeveFlag表示是否要输出日志级别
IsSyncFlag表示是否要支持多线程同步
[Version]1.1
[Author]祝冬华
[Date]2005-3-26
///////////////////////////////////////////////////////////////////////////////
[Description]
这是一个日志类,提供日志输出功能
主要的方法Trace,Debug,Info,Error,Fatal等五种方法
在这个类中,定义一个XLog实例全局量Log,通过这个实例输出日志
例:
Log.Info("ErrorInput: %s",strErrorInput);
X_INFO( "ErrorInput" );
WriteLog(LOG_LEVEL_INFO,"ErrorInput: %s",strErrorInput);
[Version]1.0
[Author]祝冬华
[Date]2004-10-28
///////////////////////////////////////////////////////////////////////////////
*/
class XLog
{
public:
XLog();
virtual ~XLog();
void Trace(char * fmt,...);
void Debug(char * fmt,...);
void Info (char * fmt,...);
void Error(char * fmt,...);
void Fatal(char * fmt,...);
void Trace(const AnsiString & strMessage);
void Debug(const AnsiString & strMessage);
void Info (const AnsiString & strMessage);
void Error(const AnsiString & strMessage);
void Fatal(const AnsiString & strMessage);
void __fastcall __WriteLog(int iLogLevel, char * fmt, va_list arglist);
void __fastcall __WriteLog(int iLogLevel,const AnsiString & strMessage);
void CloseLogFileOut(); //关闭日志文件输出
void OpenLogFileOut(); //打开日志文件输出
void CloseStringsOut(); //关闭字符串数组输出
void OpenStringsOut(); //打开字符串数组输出
public:
__property AnsiString LogFile = {read = m_LogFile, write = m_LogFile };
__property int Level = {read = m_Level,write = SetLevel };
__property TStrings * OutStrings= {read = m_OutStrings,write = m_OutStrings}; //在两个以上的线程中,最好不要使和该属性,可能会死锁
__property int LogFileSize = { read = m_LogFileSize,write = m_LogFileSize };
__property int MaxLogFileCount = { read = m_MaxLogFileCount, write = m_MaxLogFileCount };
__property bool IsSyncFlag = { read = m_IsSyncFlag, write = m_IsSyncFlag };
__property bool DateTimeFlag = { read = m_DateTimeFlag, write = m_DateTimeFlag };
__property bool LevelFlag = { read = m_LevelFlag, write = m_LevelFlag };
private:
void __fastcall SetLevel(int v);
void CheckLogFile();
private:
AnsiString m_LogFile; //日志文件名
FILE *m_fp; //日志文件句柄
bool m_LogFileOut;
bool m_StringsOut;
bool m_IsSyncFlag;
bool m_DateTimeFlag;
bool m_LevelFlag;
int m_Level;
TStrings * m_OutStrings;
TCriticalSection * m_SyncFlag;
int m_LogFileCount;
int m_LogFileSize;
int m_MaxLogFileCount; //最大的文件计数,当大于等于这个计数时,m_LogFileCount又将从0开始
};
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -