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
20 public:
21 ~ProblemGenerationILogger() override = default;
22 void display_message(const std::string& message) override = 0;
23 void display_message(const std::string& str, LogUtils::LOGLEVEL level,
24 const std::string& context) override = 0;
25 void PrintIterationSeparatorBegin() override = 0;
26 void PrintIterationSeparatorEnd() override = 0;
27
28 virtual std::ostream& GetOstreamObject() = 0;
29 LogUtils::LOGGERTYPE Type() const { return type_; }
30
31 protected:
32 void SetType(const LogUtils::LOGGERTYPE& type) { type_ = type; }
33
34 private:
35 LogUtils::LOGGERTYPE type_ = LogUtils::LOGGERTYPE::NONE;
36};
37using ProblemGenerationILoggerSharedPointer =
38 std::shared_ptr<ProblemGenerationILogger>;
40 private:
41 std::filesystem::path logFilePath_;
42 std::ofstream logFile_;
43
44 public:
45 ~ProblemGenerationFileLogger() override { logFile_.close(); }
47 const std::filesystem::path& logFilePath);
48 void display_message(const std::string& message) override;
49 void display_message(const std::string& message,
50 const LogUtils::LOGLEVEL log_level,
51 const std::string& context) override;
52 void PrintIterationSeparatorBegin() override;
53 void PrintIterationSeparatorEnd() override;
54 std::ostream& GetOstreamObject() override;
55};
56
58 private:
59 std::ostream& stream_;
60
61 public:
62 ~ProblemGenerationOstreamLogger() override = default;
63 explicit ProblemGenerationOstreamLogger(std::ostream& stream);
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 private:
75 LogUtils::LOGLEVEL log_level_;
76 std::string context_ = "Unknown Context";
77
78 public:
79 explicit ProblemGenerationLogger(const LogUtils::LOGLEVEL log_level)
80 : log_level_(log_level) {}
81 ~ProblemGenerationLogger() = default;
82
83 void AddLogger(const ProblemGenerationILoggerSharedPointer& logger);
84 void display_message(const std::string& message) override;
85 void display_message(const std::string& message,
86 const LogUtils::LOGLEVEL log_level,
87 const std::string& context) override;
88 void PrintIterationSeparatorBegin() override;
89 void PrintIterationSeparatorEnd() override;
90 void setLogLevel(const LogUtils::LOGLEVEL log_level);
91 void setContext(const std::string& context) { context_ = context; }
92 const std::string& getContext() const;
93 ProblemGenerationLogger& operator()(const LogUtils::LOGLEVEL log_level) {
94 return (*this) << log_level;
95 }
96 ProblemGenerationLogger& operator()() {
97 return (*this) << PrefixMessage(log_level_, context_);
98 }
99
100 ProblemGenerationLogger& operator<<(std::ostream& (*f)(std::ostream&));
101 ProblemGenerationLogger& operator<<(
102 const std::shared_ptr<ProblemGenerationLogger> logger) {
103 return (*logger);
104 }
105 ProblemGenerationLogger& operator<<(const LogUtils::LOGLEVEL log_level);
106
107 template <typename T>
108 ProblemGenerationLogger& operator<<(T const& t);
109
110 private:
111 std::list<ProblemGenerationILoggerSharedPointer> loggers_;
112 std::set<ProblemGenerationILoggerSharedPointer> enabled_loggers_;
113 void update_enabled_logger();
114 bool try_to_add_logger_to_enabled_list(
115 const ProblemGenerationILoggerSharedPointer& logger);
116};
117template <typename T>
118ProblemGenerationLogger& ProblemGenerationLogger::operator<<(T const& t) {
119 for (const auto& subLogger : enabled_loggers_) {
120 subLogger->GetOstreamObject() << t;
121 }
122 return *this;
123}
124std::shared_ptr<ProblemGenerationLogger> BuildLogger(
125 const std::filesystem::path& log_file_path, std::ostream& stream,
126 const std::string& context);
127
128} // namespace ProblemGenerationLog
129#endif //__PROBLEMGENERATIONLOGGER_H__
Definition ProblemGenerationLogger.h:39
void display_message(const std::string &message) override
pure virtual method to display a std::string message
Definition ProblemGenerationLogger.cpp:17
Definition ProblemGenerationLogger.h:19
void display_message(const std::string &message) override=0
pure virtual method to display a std::string message
Definition ProblemGenerationLogger.h:73
void display_message(const std::string &message) override
pure virtual method to display a std::string message
Definition ProblemGenerationLogger.cpp:67
Definition ProblemGenerationLogger.h:57
void display_message(const std::string &message) override
pure virtual method to display a std::string message
Definition ProblemGenerationLogger.cpp:45
Xpansion Unique log Interface.
Definition ILogger.h:74