Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
ProblemGenerationLogger.h
1#ifndef __PROBLEMGENERATIONLOGGER_H__
2#define __PROBLEMGENERATIONLOGGER_H__
3#include <chrono>
4#include <ctime>
5#include <filesystem>
6#include <fstream>
7#include <iostream>
8#include <list>
9#include <memory>
10#include <ostream>
11#include <set>
12#include <string>
13
14#include "antares-xpansion/xpansion_interfaces/ILogger.h"
15#include "antares-xpansion/xpansion_interfaces/LoggerUtils.h"
16
17namespace ProblemGenerationLog
18{
19
21{
22public:
23 ~ProblemGenerationILogger() override = default;
24 void display_message(const std::string& message) override = 0;
25 void display_message(const std::string& str,
26 LogUtils::LOGLEVEL level,
27 const std::string& context) override
28 = 0;
29 void PrintIterationSeparatorBegin() override = 0;
30 void PrintIterationSeparatorEnd() override = 0;
31
32 virtual std::ostream& GetOstreamObject() = 0;
33
34 LogUtils::LOGGERTYPE Type() const
35 {
36 return type_;
37 }
38
39protected:
40 void SetType(const LogUtils::LOGGERTYPE& type)
41 {
42 type_ = type;
43 }
44
45private:
46 LogUtils::LOGGERTYPE type_ = LogUtils::LOGGERTYPE::NONE;
47};
48
49using ProblemGenerationILoggerSharedPointer = std::shared_ptr<ProblemGenerationILogger>;
50
52{
53private:
54 std::filesystem::path logFilePath_;
55 std::ofstream logFile_;
56
57public:
59 {
60 logFile_.close();
61 }
62
63 explicit ProblemGenerationFileLogger(const std::filesystem::path& logFilePath);
64 void display_message(const std::string& message) override;
65 void display_message(const std::string& message,
66 const LogUtils::LOGLEVEL log_level,
67 const std::string& context) override;
68 void PrintIterationSeparatorBegin() override;
69 void PrintIterationSeparatorEnd() override;
70 std::ostream& GetOstreamObject() override;
71};
72
74{
75private:
76 std::ostream& stream_;
77
78public:
79 ~ProblemGenerationOstreamLogger() override = default;
80 explicit ProblemGenerationOstreamLogger(std::ostream& stream);
81 void display_message(const std::string& message) override;
82 void display_message(const std::string& message,
83 const LogUtils::LOGLEVEL log_level,
84 const std::string& context) override;
85 void PrintIterationSeparatorBegin() override;
86 void PrintIterationSeparatorEnd() override;
87 std::ostream& GetOstreamObject() override;
88};
89
91{
92private:
93 LogUtils::LOGLEVEL log_level_;
94 std::string context_ = "Unknown Context";
95
96public:
97 explicit ProblemGenerationLogger(const LogUtils::LOGLEVEL log_level):
98 log_level_(log_level)
99 {
100 }
101
102 ~ProblemGenerationLogger() = default;
103
104 void AddLogger(const ProblemGenerationILoggerSharedPointer& logger);
105 void display_message(const std::string& message) override;
106 void display_message(const std::string& message,
107 const LogUtils::LOGLEVEL log_level,
108 const std::string& context) override;
109 void PrintIterationSeparatorBegin() override;
110 void PrintIterationSeparatorEnd() override;
111 void setLogLevel(const LogUtils::LOGLEVEL log_level);
112
113 void setContext(const std::string& context)
114 {
115 context_ = context;
116 }
117
118 const std::string& getContext() const;
119
120 ProblemGenerationLogger& operator()(const LogUtils::LOGLEVEL log_level)
121 {
122 return (*this) << log_level;
123 }
124
125 ProblemGenerationLogger& operator()()
126 {
127 return (*this) << PrefixMessage(log_level_, context_);
128 }
129
130 ProblemGenerationLogger& operator<<(std::ostream& (*f)(std::ostream&));
131
132 ProblemGenerationLogger& operator<<(const std::shared_ptr<ProblemGenerationLogger> logger)
133 {
134 return (*logger);
135 }
136
137 ProblemGenerationLogger& operator<<(const LogUtils::LOGLEVEL log_level);
138
139 template<typename T>
140 ProblemGenerationLogger& operator<<(const T& t);
141
142private:
143 std::list<ProblemGenerationILoggerSharedPointer> loggers_;
144 std::set<ProblemGenerationILoggerSharedPointer> enabled_loggers_;
145 void update_enabled_logger();
146 bool try_to_add_logger_to_enabled_list(const ProblemGenerationILoggerSharedPointer& logger);
147};
148
149template<typename T>
150ProblemGenerationLogger& ProblemGenerationLogger::operator<<(const T& t)
151{
152 for (const auto& subLogger: enabled_loggers_)
153 {
154 subLogger->GetOstreamObject() << t;
155 }
156 return *this;
157}
158
159std::shared_ptr<ProblemGenerationLogger> BuildLogger(const std::filesystem::path& log_file_path,
160 std::ostream& stream,
161 const std::string& context);
162
163} // namespace ProblemGenerationLog
164#endif //__PROBLEMGENERATIONLOGGER_H__
Definition ProblemGenerationLogger.h:52
void display_message(const std::string &message) override
pure virtual method to display a std::string message
Definition ProblemGenerationLogger.cpp:20
Definition ProblemGenerationLogger.h:21
void display_message(const std::string &message) override=0
pure virtual method to display a std::string message
Definition ProblemGenerationLogger.h:91
void display_message(const std::string &message) override
pure virtual method to display a std::string message
Definition ProblemGenerationLogger.cpp:89
Definition ProblemGenerationLogger.h:74
void display_message(const std::string &message) override
pure virtual method to display a std::string message
Definition ProblemGenerationLogger.cpp:58
Xpansion Unique log Interface.
Definition ILogger.h:78