ifm3d
logger.h
1 // -*- c++ -*-
2 /*
3  * Copyright 2023-present ifm electronic, gmbh
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef IFM3D_COMMON_LOGGING_LOGGER_H
8 #define IFM3D_COMMON_LOGGING_LOGGER_H
9 
10 #include <ifm3d/common/logging/log_level.h>
11 #include <ifm3d/common/logging/log_writer.h>
12 #include <ifm3d/common/logging/log_writer_console.h>
13 #include <ifm3d/common/logging/log_writer_console_colored.h>
14 #include <ifm3d/common/logging/log_formatter_text.h>
15 #include <ifm3d/common/module_common.h>
16 
17 #include <memory>
18 
19 namespace ifm3d
20 {
21  class IFM3D_EXPORT Logger
22  {
23  public:
24  Logger(LogLevel log_level = LogLevel::Warning)
25  : log_level_(log_level),
26  writer_(std::make_shared<LogWriterConsoleColored<LogFormatterText>>(
27  Output::StdErr))
28  {}
29 
30  Logger&
31  SetWriter(std::shared_ptr<LogWriter> writer)
32  {
33  this->writer_ = writer;
34  return *this;
35  }
36 
37  LogLevel
38  GetLogLevel() const
39  {
40  return this->log_level_;
41  }
42 
43  void
44  SetLogLevel(LogLevel log_level)
45  {
46  this->log_level_ = log_level;
47  }
48 
49  inline bool
50  ShouldLog(LogLevel log_level) const
51  {
52  return log_level <= this->log_level_;
53  }
54 
55  inline void
56  Write(const LogEntry& entry)
57  {
58  if (this->writer_)
59  {
60  this->writer_->Write(entry);
61  }
62  }
63 
64  static Logger& Get();
65 
66  private:
67  LogLevel log_level_;
68  std::shared_ptr<LogWriter> writer_;
69  };
70 
71 }
72 
73 #endif // IFM3D_COMMON_LOGGING_LOGGER_H
ifm3d::Logger
Definition: logger.h:21
ifm3d::LogEntry
Definition: log_entry.h:19
ifm3d::LogWriterConsoleColored
Definition: log_writer_console_colored.h:27