-
Notifications
You must be signed in to change notification settings - Fork 250
/
Copy pathlogger_output.h
240 lines (175 loc) · 4.87 KB
/
logger_output.h
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
// | / |
// ' / __| _` | __| _ \ __|
// . \ | ( | | ( |\__ `
// _|\_\_| \__,_|\__|\___/ ____/
// Multi-Physics
//
// License: BSD License
// Kratos default license: kratos/license.txt
//
// Main authors: Pooyan Dadvand
//
//
#if !defined(KRATOS_LOGGER_OUTPUT_H_INCLUDED )
#define KRATOS_LOGGER_OUTPUT_H_INCLUDED
// System includes
#include <string>
#include <iostream>
#include <map>
// External includes
// Project includes
#include "includes/define.h"
#include "input_output/logger_message.h"
#include "containers/flags.h"
namespace Kratos
{
///@addtogroup KratosCore
///@{
///@name Kratos Classes
///@{
/// LoggerOutput is the base class for all logger outputs.
/** LoggerOutput defines the interface for all logger outputs
and also provides the basic (and default) functionalities
to be extended in other outputs
*/
class KRATOS_API(KRATOS_CORE) LoggerOutput
{
public:
///@name Type Definitions
///@{
KRATOS_DEFINE_LOCAL_FLAG(WARNING_PREFIX);
KRATOS_DEFINE_LOCAL_FLAG(INFO_PREFIX);
KRATOS_DEFINE_LOCAL_FLAG(DETAIL_PREFIX);
KRATOS_DEFINE_LOCAL_FLAG(DEBUG_PREFIX);
KRATOS_DEFINE_LOCAL_FLAG(TRACE_PREFIX);
/// Pointer definition of LoggerOutput
KRATOS_CLASS_POINTER_DEFINITION(LoggerOutput);
///@}
///@name Enums
///@{
///@}
///@name Life Cycle
///@{
explicit LoggerOutput(std::ostream& rOutputStream)
: mpStream(&rOutputStream),
mMaxLevel(1),
mSeverity(LoggerMessage::Severity::INFO),
mCategory(LoggerMessage::Category::STATUS)
{
mOptions.Set(WARNING_PREFIX, true);
mOptions.Set(INFO_PREFIX, false);
mOptions.Set(DETAIL_PREFIX, false);
mOptions.Set(DEBUG_PREFIX, false);
mOptions.Set(TRACE_PREFIX, false);
}
LoggerOutput(LoggerOutput const& Other)
: mpStream(Other.mpStream), mMaxLevel(Other.mMaxLevel), mSeverity(Other.mSeverity), mCategory(Other.mCategory) {}
/// Destructor.
virtual ~LoggerOutput() {}
///@}
///@name Operators
///@{
LoggerOutput& operator=(LoggerOutput const& Other) = delete;
///@}
///@name Operations
///@{
///@}
///@name Access
///@{
virtual void WriteHeader();
virtual void WriteMessage(LoggerMessage const& TheMessage);
virtual void Flush();
void SetMaxLevel(std::size_t TheLevel) {
mMaxLevel = TheLevel;
}
std::size_t GetMaxLevel() const {
return mMaxLevel;
}
void SetSeverity(LoggerMessage::Severity const& TheSeverity) {
mSeverity = TheSeverity;
}
LoggerMessage::Severity GetSeverity() const {
return mSeverity;
}
void SetCategory(LoggerMessage::Category const& TheCategory) {
mCategory = TheCategory;
}
LoggerMessage::Category GetCategory() const {
return mCategory;
}
void SetOption(const Kratos::Flags ThisFlag, bool Value) {
mOptions.Set(ThisFlag, Value);
}
bool GetOption(const Kratos::Flags ThisFlag) {
return mOptions.Is(ThisFlag);
}
///@}
///@name Inquiry
///@{
///@}
///@name Input and output
///@{
/// Turn back information as a string.
virtual std::string Info() const;
/// Print information about this object.
virtual void PrintInfo(std::ostream& rOStream) const;
/// Print object's data.
virtual void PrintData(std::ostream& rOStream) const;
/// string stream function
template<class StreamValueType>
LoggerOutput& operator << (StreamValueType const& rValue)
{
std::stringstream buffer;
buffer << rValue;
GetStream() << buffer.str();
return *this;
}
/// Manipulator stream function
LoggerOutput& operator << (std::ostream& (*pf)(std::ostream&));
/// char stream function
LoggerOutput& operator << (const char * rString);
///@}
protected:
LoggerOutput()
: mpStream(nullptr),
mMaxLevel(1),
mSeverity(LoggerMessage::Severity::INFO),
mCategory(LoggerMessage::Category::STATUS)
{
mOptions.Set(WARNING_PREFIX, true);
mOptions.Set(INFO_PREFIX, false);
mOptions.Set(DETAIL_PREFIX, false);
mOptions.Set(DEBUG_PREFIX, false);
mOptions.Set(TRACE_PREFIX, false);
}
std::ostream& GetStream() {return *mpStream;}
std::ostream* pGetStream() {return mpStream;}
void SetStream(std::ostream* pStream) {mpStream = pStream;}
virtual void SetMessageColor(LoggerMessage::Severity MessageSeverity);
virtual void ResetMessageColor(LoggerMessage::Severity MessageSeverity);
private:
///@name Life Cycle
///@{
///@}
///@name Member Variables
///@{
std::ostream* mpStream;
std::size_t mMaxLevel;
LoggerMessage::Severity mSeverity;
LoggerMessage::Category mCategory;
Kratos::Flags mOptions;
///@}
}; // Class LoggerOutput
///@}
///@name Input and output
///@{
/// output stream function
std::ostream& operator << (std::ostream& rOStream,
const LoggerOutput& rThis);
///@}
///@name macros
///@{
///@}
///@} addtogroup block
} // namespace Kratos.
#endif // KRATOS_LOGGER_OUTPUT_H_INCLUDED defined