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