Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 04edf5b

Browse files
committed
完成了对Logger模块的开发工作
1 parent d2875f6 commit 04edf5b

File tree

2 files changed

+177
-7
lines changed

2 files changed

+177
-7
lines changed

PlayServer/Loggere.h

Lines changed: 166 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,160 @@
66
#include<sys/timeb.h>
77
#include <sys/stat.h>
88
#include<iostream>
9+
#include<cstdarg>
10+
#include<sstream>
11+
12+
13+
enum LogLevel {
14+
LOG_INFO,
15+
LOG_DEBUG,
16+
LOG_WARNING,
17+
LOG_ERROR,
18+
LOG_FATAL
19+
};
920

1021
class LogInfo
1122
{
1223
public:
13-
LogInfo();
14-
~LogInfo();
24+
LogInfo(const char* file, int line, const char* func, pid_t pid, pthread_t tid, int level, const char* fmt, ...)
25+
{
26+
const char sLevel[][8] = { "INFO","DEBUG","WARNING","ERROR","FATAL" };
27+
char* buf = NULL;
28+
bAuto = false;
29+
int count = asprintf(&buf, "%s(%d):[%s][%s]<%d-%d>(%s) ",file, line, sLevel[level], (char*)CLoggerServer::GetTimeStr(), pid, tid, func);
30+
if (count > 0)
31+
{
32+
m_buf = buf;
33+
free(buf);
34+
}
35+
else
36+
{
37+
return;
38+
}
39+
va_list ap;
40+
va_start(ap, fmt);
41+
42+
count = vasprintf(&buf, fmt, ap);
43+
if (count > 0)
44+
{
45+
m_buf += buf;
46+
free(buf);
47+
}
48+
va_end(ap);
49+
50+
}
51+
LogInfo(const char* file, int line, const char* func, pid_t pid, pthread_t tid, int level)
52+
{
53+
bAuto = true;
54+
//自己主动记录日志
55+
const char sLevel[][8] = { "INFO","DEBUG","WARNING","ERROR","FATAL" };
56+
char* buf = NULL;
57+
bAuto = false;
58+
timeb tmb;
59+
ftime(&tmb);
60+
int count = asprintf(&buf, "%s(%d):[%s][%s]<%d-%d>(%s) ", file, line, sLevel[level], (char*)CLoggerServer::GetTimeStr(), pid, tid, func);
61+
if (count > 0)
62+
{
63+
m_buf = buf;
64+
free(buf);
65+
}
66+
67+
68+
}
69+
LogInfo(const char* file, int line, const char* func, pid_t pid, pthread_t tid, int level, void* pData, size_t nSize)
70+
{
71+
72+
bAuto = false;
73+
const char sLevel[][8] = { "INFO","DEBUG","WARNING","ERROR","FATAL" };
74+
char* buf = NULL;
75+
bAuto = false;
76+
timeb tmb;
77+
ftime(&tmb);
78+
int count = asprintf(&buf, "%s(%d):[%s][%s]<%d-%d>(%s) \n", file, line, sLevel[level], (char*)CLoggerServer::GetTimeStr(), pid, tid, func);
79+
if (count > 0)
80+
{
81+
m_buf = buf;
82+
free(buf);
83+
}
84+
else
85+
{
86+
return;
87+
}
88+
Buffer out;
89+
size_t i = 0;
90+
char* Data = (char*)pData;
91+
for ( ; i < nSize; i++)
92+
{
93+
char buf[16] = "";
94+
snprintf(buf, sizeof(buf), "02X ", Data[i] & 0xFF);
95+
m_buf += buf;
96+
if (0 == ((i + 1) % 16))
97+
{
98+
m_buf = "\t;";
99+
for (size_t j = i - 15; j <= i; j++)
100+
{
101+
if ((Data[j] & 0xFF) > 31 && (Data[j] & 0xFF) < 0x7F)
102+
{
103+
m_buf += Data[i];
104+
}
105+
else
106+
{
107+
m_buf == ".";
108+
}
109+
}
110+
m_buf == "\n";
111+
}
112+
}
113+
114+
//处理数据尾部
115+
size_t k = i % 16;
116+
if (k != 0)
117+
{
118+
for (size_t j = 0; j < 16 - k; j++) m_buf += " ";
119+
m_buf = "\t;";
120+
for (size_t j = i - 15; j <= i; j++)
121+
{
122+
if ((Data[j] & 0xFF) > 31 && (Data[j] & 0xFF) < 0x7F)
123+
{
124+
m_buf += Data[i];
125+
}
126+
else
127+
{
128+
m_buf == ".";
129+
}
130+
}
131+
m_buf == "\n";
132+
}
133+
}
134+
~LogInfo()
135+
{
136+
if (bAuto)
137+
{
138+
CLoggerServer::Trace(*this);
139+
}
140+
}
15141
operator Buffer() const{}
16142

17-
private:
143+
template<typename T>
144+
LogInfo& operator<< (const T& data)
145+
{
146+
std::stringstream stream;
147+
stream << data;
148+
m_buf += stream.str();
149+
return *this;
150+
}
18151

152+
private:
153+
bool bAuto = false;
154+
Buffer m_buf;
19155
};
20156

21157

22158

23159
class CLoggerServer
24160
{
25161
public:
26-
CLoggerServer():m_thread(CLoggerServer::ThreadFunc, this)
162+
CLoggerServer():m_thread(&CLoggerServer::ThreadFunc, this)
27163
{
28164
m_pServer = NULL;
29165
m_path = "./log/" + GetTimeStr() + ".log";
@@ -174,17 +310,18 @@ class CLoggerServer
174310
client.Send(info);
175311
}
176312
}
177-
178313
static Buffer GetTimeStr()
179314
{
180315
Buffer result(128);
181316
timeb tmb;
182317
ftime(&tmb);
183318
tm* pTm = localtime(&tmb.time);
184-
int nSize = snprintf(result, result.size(), "%04d-%02d-%02d %02d-%02d-%02d %03d", pTm->tm_year+1900, pTm->tm_mon+1,pTm->tm_mday, pTm->tm_hour, pTm->tm_min, pTm->tm_sec, tmb.millitm);
319+
int nSize = snprintf(result, result.size(), "%04d-%02d-%02d %02d-%02d-%02d %03d", pTm->tm_year + 1900, pTm->tm_mon + 1, pTm->tm_mday, pTm->tm_hour, pTm->tm_min, pTm->tm_sec, tmb.millitm);
185320
result.resize(nSize);
186321
}
187322
private:
323+
324+
188325
void WriteLog(const Buffer& data)
189326
{
190327
if (m_file == NULL)
@@ -206,3 +343,26 @@ class CLoggerServer
206343
FILE* m_file;
207344

208345
};
346+
347+
348+
#ifndef TRACE
349+
#define TRACEI(...) CLoggerServer::Trace(LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_INFO, __VA_AGRS__))
350+
#define TRACED(...) CLoggerServer::Trace(LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_DEBUG, __VA_AGRS__))
351+
#define TRACEW(...)CLoggerServer::Trace(LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(), LOG_WARNING, __VA_AGRS__))
352+
#define TRACEE(...)CLoggerServer::Trace(LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_ERROR, __VA_AGRS__))
353+
#define TRACEF(...)CLoggerServer::Trace(LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_FATAL, __VA_AGRS__))
354+
355+
//LOGI << "hello" << "good"
356+
#define LOGI LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_INFO)
357+
#define LOGD LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_DEBUG)
358+
#define LOGW LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_WARNING)
359+
#define LOGE LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_ERROR)
360+
#define LOGF LogInfo(__FILE__, __LINE__,__FUNCTION__, getpid(), pthread_self(),LOG_FATAL)
361+
362+
//01 02 03 A1 ... ...
363+
#define DUMPI(data, size) LogInfo(__FILE__,__LINE__, __FUNCTION__, getpid(),pthread_self(), LOG_INFO, data, size)
364+
#define DUMPD(data, size) LogInfo(__FILE__,__LINE__, __FUNCTION__, getpid(),pthread_self(), LOG_DEBUG, data, size)
365+
#define DUMPW(data, size) LogInfo(__FILE__,__LINE__, __FUNCTION__, getpid(),pthread_self(), LOG_WARNING, data, size)
366+
#define DUMPE(data, size) LogInfo(__FILE__,__LINE__, __FUNCTION__, getpid(),pthread_self(), LOG_ERROR, data, size)
367+
#define DUMPF(data, size) LogInfo(__FILE__,__LINE__, __FUNCTION__, getpid(),pthread_self(), LOG_FATAL, data, size)
368+
#endif

PlayServer/main.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,24 @@
88
#include <csignal>
99
#include"Process.h"
1010

11+
#include"Loggere.h"
1112

13+
int LogTest()
14+
{
1215

16+
}
1317

1418

1519

1620
int CreateLogServer(CProcess* proc)
1721
{
18-
printf("%s(%d):<%s> pid = %d\n", __FILE__, __LINE__, __FUNCTION__, getpid());
22+
//printf("%s(%d):<%s> pid = %d\n", __FILE__, __LINE__, __FUNCTION__, getpid());
23+
CLoggerServer server;
24+
int ret = server.Start();
25+
if(ret != 0)
26+
{
27+
printf("%s(%d):<%s> pid = %d errno = %d msg:%s\n", __FILE__, __LINE__, __FUNCTION__, getpid(), errno, strerror(errno));
28+
}
1929
return 0;
2030
}
2131

0 commit comments

Comments
 (0)