1 // Copyright (C) 2020 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) 2 // This Source Code Form is subject to the terms of the Mozilla Public 3 // License, v. 2.0. If a copy of the MPL was not distributed with this 4 // file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 6 #ifndef VSOMEIP_V3_LOGGER_HPP_ 7 #define VSOMEIP_V3_LOGGER_HPP_ 8 9 #include <chrono> 10 #include <cstdint> 11 #include <mutex> 12 #include <ostream> 13 #include <sstream> 14 #include <streambuf> 15 16 #include <vsomeip/export.hpp> 17 18 namespace vsomeip_v3 { 19 namespace logger { 20 21 enum class VSOMEIP_IMPORT_EXPORT level_e : std::uint8_t { 22 LL_NONE = 0, 23 LL_FATAL = 1, 24 LL_ERROR = 2, 25 LL_WARNING = 3, 26 LL_INFO = 4, 27 LL_DEBUG = 5, 28 LL_VERBOSE = 6 29 }; 30 31 class message 32 : public std::ostream { 33 34 public: 35 VSOMEIP_IMPORT_EXPORT message(level_e _level); 36 VSOMEIP_IMPORT_EXPORT ~message(); 37 38 private: 39 class buffer : public std::streambuf { 40 public: 41 int_type overflow(int_type); 42 std::streamsize xsputn(const char *, std::streamsize); 43 44 std::stringstream data_; 45 }; 46 47 std::chrono::system_clock::time_point when_; 48 buffer buffer_; 49 level_e level_; 50 static std::mutex mutex__; 51 }; 52 53 } // namespace logger 54 } // namespace vsomeip_v3 55 56 #define VSOMEIP_FATAL vsomeip_v3::logger::message(vsomeip_v3::logger::level_e::LL_FATAL) 57 #define VSOMEIP_ERROR vsomeip_v3::logger::message(vsomeip_v3::logger::level_e::LL_ERROR) 58 #define VSOMEIP_WARNING vsomeip_v3::logger::message(vsomeip_v3::logger::level_e::LL_WARNING) 59 #define VSOMEIP_INFO vsomeip_v3::logger::message(vsomeip_v3::logger::level_e::LL_INFO) 60 #define VSOMEIP_DEBUG vsomeip_v3::logger::message(vsomeip_v3::logger::level_e::LL_DEBUG) 61 #define VSOMEIP_TRACE vsomeip_v3::logger::message(vsomeip_v3::logger::level_e::LL_VERBOSE) 62 63 #define VSOMEIP_LOG_DEFAULT_APPLICATION_ID "VSIP" 64 #define VSOMEIP_LOG_DEFAULT_APPLICATION_NAME "vSomeIP application|SysInfra|IPC" 65 66 #endif // VSOMEIP_V3_LOGGER_HPP_ 67