-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogging.c
105 lines (102 loc) · 3.32 KB
/
logging.c
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
#include "headers.h"
errcode initLog(char *filename)
{
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
char timestamp[20];
char bigtimestamp[25];
strftime(timestamp, sizeof(timestamp), "%m-%d-%H:%M", timeinfo);
strftime(bigtimestamp, sizeof(bigtimestamp), "%Y-%m-%d-%H:%M:%S", timeinfo);
snprintf(filename, 30, "logs/%s.log", timestamp);
FILE *logFile = fopen(filename, "w");
if (logFile == NULL)
{
return FILE_DESCRIPTOR_ERROR;
}
fprintf(logFile, "Logfile created at %s\n", bigtimestamp);
fclose(logFile);
return NO_ERROR;
}
errcode logThis(const char *filename, logLevel level, comm whosTalking, const char *format, ...)
{
FILE *logFile = fopen(filename, "a");
if (logFile == NULL)
{
return FILE_DESCRIPTOR_ERROR;
}
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
fprintf(logFile, "[%04d-%02d-%02d %02d:%02d:%02d] ",
timeinfo->tm_year + 1900, timeinfo->tm_mon + 1, timeinfo->tm_mday,
timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);
const char *levelPrefix;
const char *commPrefix;
switch (level)
{
case LOG_INFO:
levelPrefix = "INFO";
break;
case LOG_WARNING:
levelPrefix = "WARNING";
break;
case LOG_ERROR:
levelPrefix = "ERROR";
break;
default:
levelPrefix = "UNKNOWN";
}
switch (whosTalking)
{
case CLIENT_NM:
commPrefix = "CLIENT->NM";
break;
case NM_CLIENT:
commPrefix = " NM->CLIENT";
break;
case SS_NM:
commPrefix = "SS->NM";
break;
case NM_SS:
commPrefix = "NM->SS";
break;
case NM_INTERNAL:
commPrefix = "NM INTERNAL";
break;
default:
commPrefix = "UNKNOWN";
}
fprintf(logFile, "[%s] [%s] ", levelPrefix, commPrefix);
va_list args;
va_start(args, format);
vfprintf(logFile, format, args);
va_end(args);
fprintf(logFile, "\n");
fclose(logFile);
return NO_ERROR;
}
errcode logOperation(const char *filename, MessageClient2NM message)
{
switch (message.operation)
{
case CREATE:
return logThis(filename, LOG_INFO, CLIENT_NM, "Operation: CREATE - Create a new file/folder. Buffer: %s", message.buffer);
case READ:
return logThis(filename, LOG_INFO, CLIENT_NM, "Operation: READ - Read the content of a file. Buffer: %s", message.buffer);
case WRITE:
return logThis(filename, LOG_INFO, CLIENT_NM, "Operation: WRITE - Write data to a file. Buffer: %s", message.buffer);
case DELETE:
return logThis(filename, LOG_INFO, CLIENT_NM, "Operation: DELETE - Delete a file/folder. Buffer: %s", message.buffer);
case COPY:
return logThis(filename, LOG_INFO, CLIENT_NM, "Operation: OPEN - Open a file for reading/writing. Buffer: %s", message.buffer);
case METADATA:
return logThis(filename, LOG_INFO, CLIENT_NM, "Operation: METADATA - Get metadata information about a file. Buffer: %s", message.buffer);
case TERMINATE:
return logThis(filename, LOG_INFO, CLIENT_NM, "Operation: TERMINATE - Terminate connection");
default:
return logThis(filename, LOG_INFO, CLIENT_NM, "Unknown operation. Buffer: %s", message.buffer);
}
}