-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.c
More file actions
75 lines (61 loc) · 1.93 KB
/
logger.c
File metadata and controls
75 lines (61 loc) · 1.93 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
#include "logger.h"
// TODO: temporary
#include <stdarg.h>
#include <stdint.h>
#include <string.h>
static loggerState* systemPtr;
void sendTextToFile(const char* m) {
int l = strlen(m);
int written = 0;
fwrite(m, l, 1, systemPtr->fileHandle);
}
char loggerInit(int* memoryRequirement, const char* logFile, void* state) {
*memoryRequirement = sizeof(loggerState);
if (state == 0) {
return 1;
}
systemPtr = state;
systemPtr->fileHandle = fopen(logFile, "w");
if (!systemPtr->fileHandle) {
printf("Error opening logger file.");
return 0;
}
return 1;
}
void loggerShutdown() {
fflush(systemPtr->fileHandle);
fclose(systemPtr->fileHandle);
systemPtr = 0;
}
void logOutput(logLevel level, char logToConsole, char logToFile, const char* message, ...) {
const char* levelStr[6] = {"[FATAL]: ", "[ERROR]: ", "[WARN]: ",
"[INFO]: ", "[DEBUG]: ", "[TRACE]: "};
char isError = level < 2;
// Technically imposes a 32k character limit on a single log entry, but...
// DON'T DO THAT!
char outMessage[32000];
memset(outMessage, 0, sizeof(outMessage));
// Format original message.
__builtin_va_list arg_ptr;
va_start(arg_ptr, message);
vsnprintf(outMessage, 32000, message, arg_ptr);
va_end(arg_ptr);
char finalMessage[32000];
sprintf(finalMessage, "%s%s\n", levelStr[level], outMessage);
if (logToConsole) {
if (isError) {
printf("%s\n", finalMessage);
} else {
printf("%s\n", finalMessage);
}
}
if (logToFile){
sendTextToFile(finalMessage);
}
}
void reportAssertFailure(const char* expression, const char* message,
const char* file, int line) {
logOutput(LOG_LEVEL_FATAL,1,1,
"Assertion Failure: %s, message: '%s', in file: %s, line: %d\n",
expression, message, file, line);
}