summaryrefslogtreecommitdiff
path: root/include/CommonAPI/Logger.hpp
diff options
context:
space:
mode:
authorJürgen Gehring <juergen.gehring@bmw.de>2015-06-11 06:57:47 -0700
committerJürgen Gehring <juergen.gehring@bmw.de>2015-06-11 06:57:47 -0700
commit6c463fcc3dcee619925f08ea09e19a86b9e581cc (patch)
tree17e765e0623c58778150605d1cd0340c658ce6ab /include/CommonAPI/Logger.hpp
parent1d83eb38e546e0165f1ad6821f04445b2b9b19d2 (diff)
downloadgenivi-common-api-runtime-6c463fcc3dcee619925f08ea09e19a86b9e581cc.tar.gz
CommonAPI 3.1.1
Diffstat (limited to 'include/CommonAPI/Logger.hpp')
-rw-r--r--include/CommonAPI/Logger.hpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/include/CommonAPI/Logger.hpp b/include/CommonAPI/Logger.hpp
new file mode 100644
index 0000000..d2761ac
--- /dev/null
+++ b/include/CommonAPI/Logger.hpp
@@ -0,0 +1,179 @@
+// Copyright (C) 2015 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#ifndef COMMONAPI_LOGGER_HPP_
+#define COMMONAPI_LOGGER_HPP_
+
+#ifdef USE_DLT
+#include <dlt.h>
+#endif
+
+#include <cstdint>
+#include <fstream>
+#include <memory>
+#include <mutex>
+#include <sstream>
+
+#include <CommonAPI/Export.hpp>
+
+#define COMMONAPI_LOGLEVEL_FATAL 0
+#define COMMONAPI_LOGLEVEL_ERROR 1
+#define COMMONAPI_LOGLEVEL_WARNING 2
+#define COMMONAPI_LOGLEVEL_INFO 3
+#define COMMONAPI_LOGLEVEL_DEBUG 4
+#define COMMONAPI_LOGLEVEL_VERBOSE 5
+
+#ifndef COMMONAPI_LOGLEVEL
+#define COMMONAPI_LOGLEVEL COMMONAPI_LOGLEVEL_INFO
+#endif
+
+#ifdef WIN32
+
+#define COMMONAPI_FATAL(...) \
+ do { Logger::log(Logger::Level::LL_FATAL, __VA_ARGS__); } while (false);
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_ERROR
+#define COMMONAPI_ERROR(...) \
+ do { Logger::log(Logger::Level::LL_ERROR, __VA_ARGS__); } while (false);
+#else
+#define COMMONAPI_ERROR(...)
+#endif
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_WARNING
+#define COMMONAPI_WARNING(...) \
+ do { Logger::log(Logger::Level::LL_WARNING, __VA_ARGS__); } while (false);
+#else
+#define COMMONAPI_WARNING(...)
+#endif
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_INFO
+#define COMMONAPI_INFO(...) \
+ do { Logger::log(Logger::Level::LL_INFO, __VA_ARGS__); } while (false);
+#else
+#define COMMONAPI_INFO(...)
+#endif
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_DEBUG
+#define COMMONAPI_DEBUG(...) \
+ do { Logger::log(Logger::Level::LL_DEBUG, __VA_ARGS__); } while (false);
+#else
+#define COMMONAPI_DEBUG(...)
+#endif
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_VERBOSE
+#define COMMONAPI_VERBOSE(...) \
+ do { Logger::log(Logger::Level::LL_VERBOSE, __VA_ARGS__); } while (false);
+#else
+#define COMMONAPI_VERBOSE(...)
+#endif
+
+#else // !WIN32
+
+#define COMMONAPI_FATAL(params...) \
+ do { Logger::log(Logger::Level::LL_FATAL, params); } while (false);
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_ERROR
+ #define COMMONAPI_ERROR(params...) \
+ do { Logger::log(Logger::Level::LL_ERROR, params); } while (false);
+#else
+ #define COMMONAPI_ERROR(params...)
+#endif
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_WARNING
+ #define COMMONAPI_WARNING(params...) \
+ do { Logger::log(Logger::Level::LL_WARNING, params); } while (false);
+#else
+ #define COMMONAPI_WARNING(params...)
+#endif
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_INFO
+ #define COMMONAPI_INFO(params...) \
+ do { Logger::log(Logger::Level::LL_INFO, params); } while (false);
+#else
+ #define COMMONAPI_INFO(params...)
+#endif
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_DEBUG
+ #define COMMONAPI_DEBUG(params...) \
+ do { Logger::log(Logger::Level::LL_DEBUG, params); } while (false);
+#else
+ #define COMMONAPI_DEBUG(params...)
+#endif
+
+#if COMMONAPI_LOGLEVEL >= COMMONAPI_LOGLEVEL_VERBOSE
+ #define COMMONAPI_VERBOSE(params...) \
+ do { Logger::log(Logger::Level::LL_VERBOSE, params); } while (false);
+#else
+ #define COMMONAPI_VERBOSE(params...)
+#endif
+
+#endif // WIN32
+
+namespace CommonAPI {
+
+class Logger {
+public:
+ COMMONAPI_EXPORT enum class Level : uint8_t {
+ LL_FATAL = 0, LL_ERROR = 1, LL_WARNING = 2, LL_INFO = 3, LL_DEBUG = 4, LL_VERBOSE = 5
+ };
+
+ COMMONAPI_EXPORT Logger();
+
+ template<typename... _LogEntries>
+ COMMONAPI_EXPORT static void log(Level _level, _LogEntries... _entries) {
+ std::stringstream buffer;
+ log_intern(buffer, _entries...);
+ Logger::get()->doLog(_level, buffer.str());
+ }
+
+ COMMONAPI_EXPORT static void init(bool, const std::string &, bool = false, const std::string & = "");
+
+private:
+ COMMONAPI_EXPORT static inline std::shared_ptr<Logger> get() {
+ static std::shared_ptr<Logger> theLogger = std::make_shared<Logger>();
+ return theLogger;
+ }
+
+ COMMONAPI_EXPORT static void log_intern(std::stringstream &_buffer) {
+ }
+
+ template<typename _LogEntry, typename... _MoreLogEntries>
+ COMMONAPI_EXPORT static void log_intern(std::stringstream &_buffer, _LogEntry _entry, _MoreLogEntries... _moreEntries) {
+ _buffer << _entry;
+ log_intern(_buffer, _moreEntries...);
+ }
+
+ COMMONAPI_EXPORT void doLog(Level _level, const std::string &_message);
+
+#if defined(USE_CONSOLE) || defined(USE_FILE) || defined(USE_DLT)
+ static Level stringAsLevel(const std::string &_level);
+#endif
+#if defined(USE_CONSOLE) || defined(USE_FILE)
+ static std::string levelAsString(Level _level);
+#endif
+#ifdef USE_DLT
+ static DltLogLevelType levelAsDlt(Level _level);
+#endif
+#if defined(USE_CONSOLE) || defined(USE_FILE)
+ static std::mutex mutex_;
+#endif
+#if defined(USE_CONSOLE) || defined(USE_FILE) || defined(USE_DLT)
+ static Level maximumLogLevel_;
+#endif
+#ifdef USE_CONSOLE
+ static bool useConsole_;
+#endif
+#ifdef USE_FILE
+ static std::shared_ptr<std::ofstream> file_;
+#endif
+#ifdef USE_DLT
+ static bool useDlt_;
+ DLT_DECLARE_CONTEXT(dlt_);
+#endif
+};
+
+} // namespace CommonAPI
+
+#endif // COMMONAPI_LOGGER_HPP_