ADUL
Collection of reusable C++ utilities
Loading...
Searching...
No Matches
logs.hpp
Go to the documentation of this file.
1#ifndef ADUL_LOGS_HPP
2#define ADUL_LOGS_HPP
3
4#include <string>
5#include <iostream>
6#include <vector>
7#include <functional>
8
9#include "time.hpp"
10#include "exceptions.hpp"
11
12namespace adul {
13
19namespace logs {
29class Logger {
30
31protected:
33 std::vector<std::reference_wrapper<std::ostream>> streams;
34 bool flagReady = false;
35 bool flagActive = false;
36public:
37
39
40 void addStream(std::basic_ostream<char>& p_stream);
41
43
49 void start();
50
56 void stop();
57
58 bool isReady() const;
59
65 void activate();
66
72 void deactivate();
73
74 bool isActive() const;
75
90 template<typename T> void push(const T& message) const {
91 if(!flagActive) return;
92 if(!flagReady) throw exceptions::Message("!Error! Logger is not ready!\n");
93
94 for(size_t i = 0; i < streams.size(); i++) {
95 if(!streams[i].get().good()) continue;
96 adul::time::chrono::steady_clock::duration elapsed = clock.timeElapsed();
97 streams[i].get() << "[Time: "<<
98 std::chrono::duration_cast<std::chrono::hours>(elapsed).count() << "h " <<
99 std::chrono::duration_cast<std::chrono::minutes>(elapsed).count() % 60 << "m " <<
100 std::chrono::duration_cast<std::chrono::seconds>(elapsed).count() % 60 << "s " <<
101 std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count() % 1000 << "ms]-> "
102 << message << '\n';
103 }
104 }
105};
106
107}
108
109}
110
111#endif
modified std::exception class The only difference is that you define message by yourself when create...
Definition exceptions.hpp:27
void stop()
stops the logger
bool flagReady
Definition logs.hpp:34
time::Clock clock
Definition logs.hpp:32
void addStream(std::basic_ostream< char > &p_stream)
void activate()
activates the timer
void start()
initializes the logger
bool flagActive
Definition logs.hpp:35
void push(const T &message) const
pushes message to all the logger streams
Definition logs.hpp:90
bool isReady() const
void deactivate()
deactivates the timer
std::vector< std::reference_wrapper< std::ostream > > streams
Definition logs.hpp:33
bool isActive() const
wrapper for part of std::chrono::steady_clock STL interface
Definition time.hpp:39
chrono::steady_clock::duration timeElapsed() const
project api's namespace
Definition atm.hpp:4