-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.cpp
103 lines (78 loc) · 3.26 KB
/
example.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
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
/*
* example.cpp
*
* testing logger class
* showing how to use
*/
#include <iostream>
#include <chrono>
#include <filesystem>
#include "Logger.hpp"
namespace fs = std::filesystem;
// Timer class, inspired by TheCherno (https://www.youtube.com/watch?v=YG4jexlSAjc)
class Timer{
public:
Timer(){
start();
}
// setting timer to zero
void start(){
m_startTimePoint = std::chrono::high_resolution_clock::now();
}
// stop timing, return duration
int stop(){
auto endTimePoint = std::chrono::high_resolution_clock::now();
auto start_us = std::chrono::time_point_cast<std::chrono::microseconds>(m_startTimePoint).time_since_epoch().count();
auto end_us = std::chrono::time_point_cast<std::chrono::microseconds>(endTimePoint).time_since_epoch().count();
int duration = end_us - start_us;
return duration;
}
private:
std::chrono::time_point<std::chrono::high_resolution_clock> m_startTimePoint;
};
void testLoggerClass(){
/* instantiate 3 different loggers */
// one with default settings
std::shared_ptr<TextLogger> logger = std::make_shared<TextLogger>("", LogLevel::Debug);
logger->log("Default logger", LogLevel::Info);
// one with custom time usage
std::shared_ptr<TextLogger> customLogger = std::make_shared<TextLogger>(fs::current_path().string() + "/log/customLog.log", LogLevel::Debug, true, false, true);
customLogger->log("Custom logger", LogLevel::Info, std::to_string(3.14));
// one csv logger
std::shared_ptr<CsvLogger> csvLogger = std::make_shared<CsvLogger>("kinState.csv");
csvLogger->log("t,s,v,a");
/* TESTING */
// test all three loggers simultaneously
Timer timer; // measure time until program is ready to continue with something else (-> displayed time is not time needed for logging)
for(int i = 0; i < 10; ++i){
logger->log("Message " + std::to_string(i), LogLevel::Debug);
customLogger->log("Custom logger message " + std::to_string(i), LogLevel::Debug);
customLogger->log("Custom logger message " + std::to_string(i), LogLevel::Debug, " ");
customLogger->log("Custom logger message " + std::to_string(i), LogLevel::Debug, std::to_string(i/10.0));
csvLogger->log("i,1,2,3");
}
int t1 = timer.stop();
std::cout << "without separate thread: " << t1 << " us" << std::endl;
#if ENABLE_MULTITHREADING
// test all three loggers simultaneously again, now with multithreading
LogThreader threader;
threader.addLogger(logger);
threader.addLogger(customLogger);
threader.addLogger(csvLogger);
timer.start();
for(int i = 10; i < 20; ++i){
logger->log("Message " + std::to_string(i), LogLevel::Debug);
customLogger->log("Custom logger message " + std::to_string(i), LogLevel::Debug);
customLogger->log("Custom logger message " + std::to_string(i), LogLevel::Debug, " ");
customLogger->log("Custom logger message " + std::to_string(i), LogLevel::Debug, std::to_string(i/10.0));
csvLogger->log("i,1,2,3");
}
int t2 = timer.stop();
std::cout << "with separate thread: " << t2 << " us" << std::endl;
#endif
}
int main(){
// test use of Logging class, check timing
testLoggerClass();
return 0;
}