Kinetis Bootloader Host  2.0.0
Host Tools for Kinetis devices
apps/elftosb/common/Logging.h
1 /*
2  * File: Logging.h
3  *
4  * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
5  * See included license file for license details.
6  */
7 #if !defined(_Logging_h_)
8 #define _Logging_h_
9 
10 #include <string>
11 #include <assert.h>
12 #include <stdarg.h>
13 
44 class Logger
45 {
46 public:
49  {
50  URGENT = 0,
53  INFO,
57  };
58 
59 public:
62  : m_filter(INFO)
63  , m_level(INFO)
64  {
65  }
66 
68  virtual ~Logger() {}
70 
71  inline void setFilterLevel(log_level_t level) { m_filter = level; }
74  inline log_level_t getFilterLevel() const { return m_filter; }
76  inline void setOutputLevel(log_level_t level) { m_level = level; }
78  inline log_level_t getOutputLevel() const { return m_level; }
80 
82 
83  virtual void log(const char *fmt, ...);
85 
87  virtual void log(const std::string &msg) { log(msg.c_str()); }
89  virtual void log(log_level_t level, const char *fmt, ...);
90 
92  virtual void log(log_level_t level, const std::string &msg) { log(level, msg.c_str()); }
94  virtual void log(const char *fmt, va_list args);
95 
97  virtual void log(log_level_t level, const char *fmt, va_list args);
99 
100 protected:
103 
104 protected:
106  virtual void _log(const char *msg) = 0;
107 };
108 
122 class Log
123 {
124 public:
126 
127  static inline Logger *getLogger() { return s_logger; }
130  static inline void setLogger(Logger *logger) { s_logger = logger; }
132 
134 
135  static void log(const char *fmt, ...);
137 
139  static void log(const std::string &msg);
140 
142  static void log(Logger::log_level_t level, const char *fmt, ...);
143 
145  static void log(Logger::log_level_t level, const std::string &msg);
147 
148 protected:
149  static Logger *s_logger;
150 
151 public:
172  {
173  public:
179  : m_logger(Log::getLogger())
180  , m_saved(Logger::INFO)
181  {
182  assert(m_logger);
183  m_saved = m_logger->getOutputLevel();
184  m_logger->setOutputLevel(level);
185  }
186 
192  : m_logger(logger)
193  , m_saved(logger->getOutputLevel())
194  {
195  assert(m_logger);
196  m_logger->setOutputLevel(level);
197  }
198 
202  ~SetOutputLevel() { m_logger->setOutputLevel(m_saved); }
203  protected:
206  };
207 };
208 
212 class StdoutLogger : public Logger
213 {
214 protected:
216  virtual void _log(const char *msg);
217 };
218 
219 #endif // _Logging_h_
Logger * m_logger
The logger instance we&#39;re controlling.
Definition: apps/elftosb/common/Logging.h:204
virtual ~Logger()
Destructor.
Definition: apps/elftosb/common/Logging.h:68
SetOutputLevel(Logger::log_level_t level)
Default constructor.
Definition: apps/elftosb/common/Logging.h:178
The lowest level, for messages that must always be logged.
Definition: apps/elftosb/common/Logging.h:50
log_level_t getFilterLevel() const
Returns the current logging filter level.
Definition: apps/elftosb/common/Logging.h:74
The normal log level, for status messages.
Definition: apps/elftosb/common/Logging.h:53
For fatal error messages.
Definition: apps/elftosb/common/Logging.h:51
For internal reporting.
Definition: apps/elftosb/common/Logging.h:55
static void setLogger(Logger *logger)
Sets the global logger singleton instance.
Definition: apps/elftosb/common/Logging.h:130
log_level_t m_level
The current log output level.
Definition: apps/elftosb/common/Logging.h:102
virtual void log(log_level_t level, const std::string &msg)
Log a string output at a specific output level.
Definition: apps/elftosb/common/Logging.h:92
SetOutputLevel(Logger *logger, Logger::log_level_t level)
Constructor.
Definition: apps/elftosb/common/Logging.h:191
log_level_t getOutputLevel() const
Returns the current logging output level.
Definition: apps/elftosb/common/Logging.h:78
static Logger * s_logger
The single global logger instance.
Definition: apps/elftosb/common/Logging.h:149
For non-fatal warning messages.
Definition: apps/elftosb/common/Logging.h:52
void setFilterLevel(log_level_t level)
Changes the logging level to level.
Definition: apps/elftosb/common/Logging.h:72
~SetOutputLevel()
Destructor.
Definition: apps/elftosb/common/Logging.h:202
virtual void log(const std::string &msg)
Log a string object.
Definition: apps/elftosb/common/Logging.h:87
Highest log level; verbose debug logging.
Definition: apps/elftosb/common/Logging.h:56
Logger::log_level_t m_saved
Original logging output level.
Definition: apps/elftosb/common/Logging.h:205
Wraps a set of static functions for easy global logging access.
Definition: apps/elftosb/common/Logging.h:122
virtual void log(const char *fmt,...)
Log with format.
Definition: apps/elftosb/common/Logging.cpp:16
void setOutputLevel(log_level_t level)
Changes the logging output level to level.
Definition: apps/elftosb/common/Logging.h:76
Logger()
Default constructor.
Definition: apps/elftosb/common/Logging.h:61
log_level_t m_filter
The current logging filter level.
Definition: apps/elftosb/common/Logging.h:101
log_level_t
Logging levels.
Definition: apps/elftosb/common/Logging.h:48
virtual void _log(const char *msg)=0
The base pure virtual logging function implemented by subclasses.
Simple logger that writes to stdout.
Definition: apps/elftosb/common/Logging.h:212
Utility class to temporarily change the logging output level.
Definition: apps/elftosb/common/Logging.h:171
For verbose status messages.
Definition: apps/elftosb/common/Logging.h:54
Base logger class.
Definition: apps/elftosb/common/Logging.h:44