-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLogger.cpp
64 lines (54 loc) · 1.49 KB
/
Logger.cpp
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
#include "Logger.h"
#include <sys/stat.h>
#include <ctime>
#include <unistd.h>
#include <fcntl.h>
#include <cstring>
#include <cstdarg>
Logger *Logger::m_pInstance = nullptr;
int logfile;
Logger *Logger::Instance() {
if (!m_pInstance) {
m_pInstance = new Logger;
}
return m_pInstance;
}
void Logger::init() {
char buffer[256];
std::time_t t = std::time(nullptr);
std::tm *now = std::localtime(&t);
struct stat st = {0};
if (stat("logs", &st) == -1) {
mkdir("logs", 0750);
}
strftime(buffer, sizeof(buffer), "logs/%F_%T.log", now); // "2021-09-02_15:47:00.log"
printf("Want to open %s\n", buffer);
logfile = open(buffer, O_CREAT | O_WRONLY, 0660);
if (logfile == -1) {
char msg[256];
snprintf(msg, sizeof(msg), "Unable to open log file %s!\n", buffer);
log(msg);
}
}
void const Logger::log(const char *logFormat, ...) {
char buffer[256];
char msg[256];
std::time_t t = std::time(0);
std::tm *now = std::localtime(&t);
va_list vl;
char logString[256];
va_start(vl, logFormat);
if (vsnprintf(logString, sizeof(logString), logFormat, vl) == -1) {
logString[sizeof(logString)-1] = '\0';
}
va_end(vl);
strftime(buffer, sizeof(buffer), "%F %T", now); // "2021-09-02_15:47:00.log"
sprintf(msg, "%s: %s\n", buffer, logString);
printf("%s", msg);
write(logfile, msg, strlen(msg));
}
void Logger::quit() {
if (logfile != -1) {
close(logfile);
}
}