SkyWay Linux SDK
読み取り中…
検索中…
一致する文字列を見つけられません
logger.hpp
1//
2// © NTT DOCOMO BUSINESS, Inc. All Rights Reserved.
3//
4
5#ifndef SKYWAY_GLOBAL_INTERFACE_LOGGER_HPP_
6#define SKYWAY_GLOBAL_INTERFACE_LOGGER_HPP_
7
8#include <boost/format.hpp>
9#include <memory>
10#include <mutex>
11
12#include "skyway/global/interface/logger_observer.hpp"
13
14#define __SKW_FILE__ skyway::global::interface::Logger::GetFileName(__FILE__)
15
16#define SKW_TRACE(msg, ...) \
17 if (skyway::global::interface::Logger::Shared()) { \
18 std::string formatted = \
19 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
20 skyway::global::interface::Logger::Shared()->Notify( \
21 skyway::global::interface::Logger::Level::kTrace, \
22 formatted, \
23 __SKW_FILE__, \
24 __FUNCTION__, \
25 __LINE__); \
26 skyway::global::interface::Logger::Shared()->Trace( \
27 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
28 }
29
30#define SKW_DEBUG(msg, ...) \
31 if (skyway::global::interface::Logger::Shared()) { \
32 std::string formatted = \
33 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
34 skyway::global::interface::Logger::Shared()->Notify( \
35 skyway::global::interface::Logger::Level::kDebug, \
36 formatted, \
37 __SKW_FILE__, \
38 __FUNCTION__, \
39 __LINE__); \
40 skyway::global::interface::Logger::Shared()->Debug( \
41 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
42 }
43
44#define SKW_INFO(msg, ...) \
45 if (skyway::global::interface::Logger::Shared()) { \
46 std::string formatted = \
47 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
48 skyway::global::interface::Logger::Shared()->Notify( \
49 skyway::global::interface::Logger::Level::kInfo, \
50 formatted, \
51 __SKW_FILE__, \
52 __FUNCTION__, \
53 __LINE__); \
54 skyway::global::interface::Logger::Shared()->Info( \
55 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
56 }
57
58#define SKW_WARN(msg, ...) \
59 if (skyway::global::interface::Logger::Shared()) { \
60 std::string formatted = \
61 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
62 skyway::global::interface::Logger::Shared()->Notify( \
63 skyway::global::interface::Logger::Level::kWarn, \
64 formatted, \
65 __SKW_FILE__, \
66 __FUNCTION__, \
67 __LINE__); \
68 skyway::global::interface::Logger::Shared()->Warn( \
69 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
70 }
71
72#define SKW_ERROR(msg, ...) \
73 if (skyway::global::interface::Logger::Shared()) { \
74 std::string formatted = \
75 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
76 skyway::global::interface::Logger::Shared()->Notify( \
77 skyway::global::interface::Logger::Level::kError, \
78 formatted, \
79 __SKW_FILE__, \
80 __FUNCTION__, \
81 __LINE__); \
82 skyway::global::interface::Logger::Shared()->Error( \
83 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
84 }
85
86#define SKW_TRACE_LOCAL(msg, ...) \
87 if (skyway::global::interface::Logger::Shared()) { \
88 std::string formatted = \
89 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
90 skyway::global::interface::Logger::Shared()->Trace( \
91 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
92 }
93
94#define SKW_DEBUG_LOCAL(msg, ...) \
95 if (skyway::global::interface::Logger::Shared()) { \
96 std::string formatted = \
97 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
98 skyway::global::interface::Logger::Shared()->Debug( \
99 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
100 }
101
102#define SKW_INFO_LOCAL(msg, ...) \
103 if (skyway::global::interface::Logger::Shared()) { \
104 std::string formatted = \
105 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
106 skyway::global::interface::Logger::Shared()->Info( \
107 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
108 }
109
110#define SKW_WARN_LOCAL(msg, ...) \
111 if (skyway::global::interface::Logger::Shared()) { \
112 std::string formatted = \
113 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
114 skyway::global::interface::Logger::Shared()->Warn( \
115 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
116 }
117
118#define SKW_ERROR_LOCAL(msg, ...) \
119 if (skyway::global::interface::Logger::Shared()) { \
120 std::string formatted = \
121 skyway::global::interface::Logger::Shared()->Format(msg, ##__VA_ARGS__); \
122 skyway::global::interface::Logger::Shared()->Error( \
123 formatted, __SKW_FILE__, __FUNCTION__, __LINE__); \
124 }
125
126namespace skyway {
127namespace global {
128namespace interface {
129
131class Logger {
132public:
134 enum Level { kOff, kTrace, kDebug, kInfo, kWarn, kError };
135
136 static constexpr const char* kLogLevelTraceStr = "trace";
137 static constexpr const char* kLogLevelDebugStr = "debug";
138 static constexpr const char* kLogLevelInfoStr = "info";
139 static constexpr const char* kLogLevelWarnStr = "warn";
140 static constexpr const char* kLogLevelErrorStr = "error";
141
143 virtual ~Logger() = default;
144 virtual void Trace(const std::string& msg,
145 const std::string& filename,
146 const std::string& function,
147 int line) = 0;
148 virtual void Debug(const std::string& msg,
149 const std::string& filename,
150 const std::string& function,
151 int line) = 0;
152 virtual void Info(const std::string& msg,
153 const std::string& filename,
154 const std::string& function,
155 int line) = 0;
156 virtual void Warn(const std::string& msg,
157 const std::string& filename,
158 const std::string& function,
159 int line) = 0;
160 virtual void Error(const std::string& msg,
161 const std::string& filename,
162 const std::string& function,
163 int line) = 0;
164
165 void AddObserver(std::weak_ptr<LoggerObserver> observer);
166
167 void Notify(Level log_level,
168 const std::string& message,
169 const std::string& filename,
170 const std::string& function,
171 int line);
172
173 void BuildFormat() {}
174
175 template <class Head, class... Tail>
176 void BuildFormat(Head&& head, Tail&&... tail) {
177 fmt_ = fmt_ % head;
178 this->BuildFormat(std::forward<Tail>(tail)...);
179 }
180
181 template <class FormatString, class... Args>
182 std::string Format(FormatString fmt_str, Args&&... args) {
183 std::lock_guard<std::mutex> lg(fmt_mtx_);
184 fmt_ = boost::format(fmt_str);
185 this->BuildFormat(args...);
186 return fmt_.str();
187 }
188
189 static inline std::string GetFileName(const std::string& path) {
190 size_t pos1;
191
192 pos1 = path.rfind('\\');
193 if (pos1 != std::string::npos) {
194 return path.substr(pos1 + 1, path.size() - pos1 - 1);
195 }
196
197 pos1 = path.rfind('/');
198 if (pos1 != std::string::npos) {
199 return path.substr(pos1 + 1, path.size() - pos1 - 1);
200 }
201
202 return path;
203 }
204
205 // Set value when Context::Setup()
206 static void SetSharedInstance(std::unique_ptr<Logger> logger);
207 static Logger* Shared();
209
210private:
211 static std::unique_ptr<Logger> shared_;
212 std::weak_ptr<LoggerObserver> observer_;
213
214 std::vector<LoggerObserver::SdkLog> sdk_log_buffer_;
215 std::mutex sdk_log_buffer_mtx_;
216
217 std::mutex fmt_mtx_;
218 boost::format fmt_;
219};
220
221} // namespace interface
222} // namespace global
223} // namespace skyway
224
225#endif /* SKYWAY_GLOBAL_INTERFACE_LOGGER_HPP_ */
SkyWayのログを処理するクラス
Definition logger.hpp:131
Level
ログレベル
Definition logger.hpp:134
SkyWayで発生したエラーを示す構造体
Definition error.hpp:14