-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLog.h
More file actions
266 lines (247 loc) · 10.9 KB
/
Log.h
File metadata and controls
266 lines (247 loc) · 10.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
/**************************************************************************************************************************************************
版权所有:
文件名称:log.h
功能描述:完成打印日志的功能
作者:hanxiaowei
完成日期:2013-07-29
**************************************************************************************************************************************************/
#ifndef __LOG_H
#define __LOG_H
//头文件
/**************************************************************************************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string>
#include <stdarg.h>
#include <time.h>
#include "Lock.h"
/************************************************************************************************************************************************/
//日志宏定义
/*********************************************************************************************************************************************************/
#define DEBUG_LOG(szFormat,...) CLog::CreateInstance().WriteLog(LOG_DEBUG,szFormat,##__VA_ARGS__)
#define INFO_LOG(szFormat,...) CLog::CreateInstance().WriteLog(LOG_INFO,szFormat,##__VA_ARGS__)
#define WARN_LOG(szFormat,...) CLog::CreateInstance().WriteLog(LOG_WARN,szFormat,##__VA_ARGS__)
#define ERROR_LOG(szFormat,...) CLog::CreateInstance().WriteLog(LOG_ERROR,szFormat,##__VA_ARGS__)
#define FATAL_LOG(szFormat,...) CLog::CreateInstance().WriteLog(LOG_FATAL,szFormat,##__VA_ARGS__)
#define NECESSARY_LOG(szFormat,...) CLog::CreateInstance().WriteLog(LOG_NECESSARY,szFormat,##__VA_ARGS__)
/**********************************************************************************************************************************************************/
/************************************************************************************************************************************************/
//文件位置定义
enum FILEPOS
{
//当前位置
POS_CURRENT=0,
//文件头
POS_HEAD,
//文件尾
POS_TAIL
};
//日志等级定义
enum LOGLEVEL
{
LOG_DEBUG = 0,
LOG_INFO,
LOG_WARN,
LOG_ERROR,
LOG_FATAL,
LOG_NECESSARY
};
// 文件ROll的结构体定义
typedef struct _log_roll_info
{
// 年
int nYear;
// 月
int nMonth;
// 日
int nDay;
//
unsigned int nTimes;
_log_roll_info()
{
nYear = 0;
nMonth = 0;
nDay = 0;
nTimes = 0;
}
bool is_valid()
{
if (0 == nYear && 0 == nMonth && 0 == nDay)
{
return false;
}
return true;
}
}LOG_ROLL_INFO,* LP_LOG_ROLL_INFO;
/************************************************************************************************************************************************/
//类定义
/************************************************************************************************************************************************/
//操作I/O的类(抽象类)
class CHandleIO
{
public:
CHandleIO(void) {}
virtual ~CHandleIO(void) {}
public:
/*****************************************************************************************************************************************
函数名称:Open
功能描述:打开文件或者COM等通信端口
输入参数:szName:要打开的名称
输出参数:无
返回值:true:成功 false:失败
*****************************************************************************************************************************************/
virtual bool Open(const char* szName) = 0;
/*****************************************************************************************************************************************
函数名称:Close
功能描述:进行关闭操作
输入参数:无
输出参数:无
返回值:无
*****************************************************************************************************************************************/
virtual void Close(void) = 0;
/*****************************************************************************************************************************************
函数名称:Write
功能描述:进行写操作
输入参数:pData:要写入的内容 nDataLen:写入内容的长度
输出参数:uWriteLen:实际写入的内容的长度
返回值:true:成功 false:失败
*****************************************************************************************************************************************/
virtual bool Write(void* pData,unsigned int nDataLen,unsigned int& uWriteLen) = 0;
/*****************************************************************************************************************************************
函数名称:Read
功能描述:进行读操作
输入参数:pData:存放读取内容的缓冲区 nDataLen:要读取的字节数
输出参数:uReadLen:实际读取的内容的长度
返回值:true:成功 false:失败
*****************************************************************************************************************************************/
virtual bool Read(void* pData,unsigned int nDataLen,unsigned int& uReadLen) = 0;
};
//操作文件的类
class CHandleFile:public CHandleIO
{
public:
CHandleFile(void);
virtual ~CHandleFile(void);
//必须实现的虚函数
public:
/*****************************************************************************************************************************************
函数名称:Open
功能描述:打开文件
输入参数:szName:要打开的文件名称
输出参数:无
返回值:true:成功 false:失败
*****************************************************************************************************************************************/
virtual bool Open(const char* szName);
/*****************************************************************************************************************************************
函数名称:Close
功能描述:关闭文件
输入参数:无
输出参数:无
返回值:true:成功 false:失败
*****************************************************************************************************************************************/
virtual void Close(void);
/*****************************************************************************************************************************************
函数名称:Write
功能描述:向文件中写入数据
输入参数:pData:要写入的内容 nDataLen:写入内容的长度
输出参数:uWriteLen:实际写入的内容的长度
返回值:true:成功 false:失败
*****************************************************************************************************************************************/
virtual bool Write(void* pData,unsigned int nDataLen,unsigned int& uWriteLen);
/*****************************************************************************************************************************************
函数名称:Read
功能描述:从文件中读取数据
输入参数:pData:存放读取内容的缓冲区 nDataLen:要读取的字节数
输出参数:uReadLen:实际读取的内容的长度
返回值:true:成功 false:失败
*****************************************************************************************************************************************/
virtual bool Read(void* pData,unsigned int nDataLen,unsigned int& uReadLen);
public:
/*****************************************************************************************************************************************
函数名称:IsOpen
功能描述:判断文件是否已经打开
输入参数:无
输出参数:无
返回值:true:已经打开 false:没有打开
*****************************************************************************************************************************************/
bool IsOpen(void);
/*****************************************************************************************************************************************
函数名称:SeekFilePos
功能描述:设置文件指针位置
输入参数:Pos:设置的相对位置 loffset:相对设置的偏移量 正数向后移,负数向前移
输出参数:无
返回值:true:设置成功 false:设置失败
*****************************************************************************************************************************************/
bool SeekFilePos(FILEPOS Pos,long loffset);
/*****************************************************************************************************************************************
函数名称:GetFileSize
功能描述:获取文件的大小
输入参数:无
输出参数:无
返回值:文件的大小 (-1表示获取失败)
*****************************************************************************************************************************************/
unsigned long GetFileSize(void);
private:
FILE* m_pFile;
};
//日志类
class CLog
{
private:
CLog(void);
~CLog(void);
public:
/*****************************************************************************************************************************************
函数名称:CreateInstance
功能描述:创建日志类的唯一实例
输入参数:无
输出参数:无
返回值:唯一实例的指针
*****************************************************************************************************************************************/
static CLog& CreateInstance(void);
/*****************************************************************************************************************************************
函数名称:SetLogPath
功能描述:设置日志文件的存放目录
输入参数:szLogDir:存放日志的目录
输出参数:无
返回值:无
*****************************************************************************************************************************************/
void SetLogPath(const char* szLogDir);
/*****************************************************************************************************************************************
函数名称:SetLogLevel
功能描述:设置日志级别
输入参数:loglevel:日志的等级
输出参数:无
返回值:无
*****************************************************************************************************************************************/
void SetLogLevel(LOGLEVEL loglevel);
/*****************************************************************************************************************************************
函数名称:WriteLog
功能描述:打印日志信息
输入参数:loglevel:日志的等级 szFormat:打印的格式 ...:变参
输出参数:无
返回值:无
*****************************************************************************************************************************************/
void WriteLog(LOGLEVEL loglevel,const char* szFormat,...);
/*****************************************************************************************************************************************
函数名称:SetLogNamePrefix
功能描述:设置打印日志文件的前缀名
输入参数:szPrefix:日志文件的前缀名
返回值:无
*****************************************************************************************************************************************/
void SetLogNamePrefix(const char* szPrefix);
private:
//日志文件的保存目录
std::string m_strLogDir;
//打印日志的等级
LOGLEVEL m_loglevel;
//日志文件的前缀名
std::string m_strLogPrefix;
//锁
CLock m_Lock;
LOG_ROLL_INFO m_RollFlag;
static CLog s_Log;
};
/************************************************************************************************************************************************/
#endif