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
| class log {
public:
explicit log(std::string _fileName = "log.txt") {
EnumUILanguagesA([](LPSTR _str, LONG_PTR _ptr) {
setlocale(0, _str);
return TRUE;
}, MUI_LANGUAGE_NAME, 0);
_File = std::fstream(_fileName, std::ios::app);
if (!_File.is_open()) {
throw std::exception("Failed open log file");
}
_QueueThread = boost::thread([this]() {
while (1) {
boost::shared_lock<boost::shared_mutex> lock_quard(_Mutex);
size_t queue_size = _MessageQueue.size();
if (queue_size) {
std::cout << _MessageQueue.front() << std::endl;
_File << _MessageQueue.front() << std::endl;
_MessageQueue.erase(_MessageQueue.begin());
}
}
});
}
void message(std::string _message) {
boost::lock_guard<boost::shared_mutex> lock_quard(_Mutex);
std::time_t timet = 0;
time(&timet);
std::tm time = {};
localtime_s(&time, &timet);
std::string formated_message = std::format("[{}-{}-{} {}:{}:{}]->{}", time.tm_year + 1900, time.tm_mon, time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec, _message);
_MessageQueue.push_back(formated_message);
}
void message(std::string _message, std::string _ipAddress) {
boost::lock_guard<boost::shared_mutex> lock_quard(_Mutex);
std::time_t timet = 0;
time(&timet);
std::tm* time = nullptr;
localtime_s(time, &timet);
std::string formated_message = std::format("[{}-{}-{} {}:{}:{}][{}]->{}", time->tm_year + 1900, time->tm_mon, time->tm_mday, time->tm_hour, time->tm_min, time->tm_sec, _ipAddress, _message);
_MessageQueue.push_back(formated_message);
}
~log() {
try {
_File.close();
_QueueThread.detach();
} catch (std::exception& e) {
std::cout << std::format("Fatal error: ", e.what()) << std::endl;
}
}
private:
std::fstream _File;
std::vector<std::string> _MessageQueue;
boost::shared_mutex _Mutex;
boost::thread _QueueThread;
}; |