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
|
#include "bu/logger.h"
#include <stdarg.h>
#include <time.h>
#include <stdio.h>
Bu::Logger::Logger()
{
}
Bu::Logger::~Logger()
{
}
void Bu::Logger::log( int nLevel, const char *sFile, const char *sFunction, int nLine, const char *sFormat, ...)
{
if( (nLevel&nLevelMask) == 0 )
return;
va_list ap;
va_start( ap, sFormat );
char *text;
vasprintf( &text, sFormat, ap );
va_end(ap);
time_t t = time(NULL);
char *line = NULL;
struct tm *pTime;
pTime = localtime( &t );
asprintf(
&line,
sLogFormat.getStr(),
pTime->tm_year+1900,
pTime->tm_mon+1,
pTime->tm_mday,
pTime->tm_hour,
pTime->tm_min,
pTime->tm_sec,
nLevel,
sFile,
nLine,
text,
sFunction
);
write( fileno(stdout), line, strlen(line) );
free( text );
free( line );
}
void Bu::Logger::setFormat( const Bu::FString &str )
{
sLogFormat = "";
static char fmts[][4]={
{'y', 'd', '0', '1'},
{'m', 'd', '0', '2'},
{'d', 'd', '0', '3'},
{'h', 'd', '0', '4'},
{'M', 'd', '0', '5'},
{'s', 'd', '0', '6'},
{'L', 'd', '0', '7'},
{'f', 's', '0', '8'},
{'l', 'd', '0', '9'},
{'t', 's', '1', '0'},
{'F', 's', '1', '1'},
{'\0', '\0', '\0', '\0'},
};
for( const char *s = str.getStr(); *s; s++ )
{
if( *s == '%' )
{
sLogFormat += '%';
s++;
for( int l = 0;; l++ )
{
if( fmts[l][0] == '\0' )
{
sLogFormat += *s;
break;
}
else if( *s == fmts[l][0] )
{
sLogFormat += fmts[l][2];
sLogFormat += fmts[l][3];
sLogFormat += '$';
sLogFormat += fmts[l][1];
break;
}
}
}
else
{
sLogFormat += *s;
}
}
sLogFormat += '\n';
write( fileno(stdout), sLogFormat.getStr(), sLogFormat.getSize() );
}
void Bu::Logger::setMask( int n )
{
nLevelMask = n;
}
void Bu::Logger::setLevel( int n )
{
int j;
for( j = 31; j > 0; j-- )
{
if( (n&(1<<j)) )
{
for(; j >= 0; j-- )
{
n |= (1<<j);
}
nLevelMask = n;
return;
}
}
}
|