root / trunk / code / projects / colonet / ColonetServer / Logging.cpp @ 24
History | View | Annotate | Download (2.15 KB)
1 |
/**
|
---|---|
2 |
*
|
3 |
* @author Jason Knichel
|
4 |
*
|
5 |
*/
|
6 |
|
7 |
#include <time.h> |
8 |
#include <string.h> |
9 |
#include <stdio.h> |
10 |
|
11 |
#include "includes/Logging.h" |
12 |
|
13 |
|
14 |
Log::Log(char * filename)
|
15 |
{ |
16 |
|
17 |
printf("Creating log object\n");
|
18 |
|
19 |
if (!filename)
|
20 |
{ |
21 |
fprintf(stderr, "Provided a null filename when trying to create a log.\n");
|
22 |
return;
|
23 |
} |
24 |
|
25 |
logFile = fopen(filename, "a"); //open file for appending |
26 |
if (!logFile)
|
27 |
{ |
28 |
fprintf(stderr, "Error opening %s as log file.\n", filename);
|
29 |
return;
|
30 |
} |
31 |
|
32 |
printf("About to log start message.\n");
|
33 |
logMessage(LOG_TYPE_START_LOG, "Starting server");
|
34 |
} |
35 |
|
36 |
Log::~Log() |
37 |
{ |
38 |
if (!logFile)
|
39 |
fclose(logFile); |
40 |
} |
41 |
|
42 |
struct tm Log::getCurrentTime()
|
43 |
{ |
44 |
struct tm currTime;
|
45 |
memset(&currTime, 0, sizeof(struct tm)); |
46 |
|
47 |
time_t t = time(NULL);
|
48 |
localtime_r(&t, &currTime); |
49 |
|
50 |
return currTime;
|
51 |
} |
52 |
|
53 |
int Log::logMessage(int type, char * message) |
54 |
{ |
55 |
if (!logFile)
|
56 |
{ |
57 |
fprintf(stderr, "Tried to log a message but the file pointer was null.\n");
|
58 |
return -1; |
59 |
} |
60 |
if (!message)
|
61 |
{ |
62 |
fprintf(stderr, "Tried to log a null message.\n");
|
63 |
return -1; |
64 |
} |
65 |
|
66 |
static char * start_log = "Starting Log"; |
67 |
static char * connect = "Client Connecting"; |
68 |
static char * disconnect = "Client Disconnecting"; |
69 |
static char * error = "Error"; |
70 |
static char * logGenMessage = "Generic Message"; |
71 |
|
72 |
char * messageType;
|
73 |
|
74 |
switch(type)
|
75 |
{ |
76 |
case LOG_TYPE_START_LOG:
|
77 |
messageType = start_log; |
78 |
break;
|
79 |
case LOG_TYPE_CONNECT:
|
80 |
messageType = connect; |
81 |
break;
|
82 |
case LOG_TYPE_DISCONNECT:
|
83 |
messageType = disconnect; |
84 |
break;
|
85 |
case LOG_TYPE_ERROR:
|
86 |
messageType = error; |
87 |
break;
|
88 |
case LOG_TYPE_MESSAGE:
|
89 |
messageType = logGenMessage; |
90 |
break;
|
91 |
default:
|
92 |
fprintf(stderr, "Tried to log a message with an invalid type.\n");
|
93 |
return -1; |
94 |
} |
95 |
|
96 |
struct tm currTime = getCurrentTime();
|
97 |
|
98 |
char buffer[LOG_MAX_TIME_LENGTH];
|
99 |
asctime_r(&currTime, buffer); |
100 |
int len = strlen(buffer);
|
101 |
buffer[len-1] = '\0'; //remove the newline that is put at the end by asctime_r |
102 |
fprintf(logFile, "%s %*s %s\n", buffer, LOG_MAX_TYPE_LENGTH, messageType, message);
|
103 |
fflush(logFile); |
104 |
|
105 |
|
106 |
return 0; |
107 |
} |
108 |
|