WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
log.h
Go to the documentation of this file.
1#pragma once
2#include <functional>
3#include <optional>
4#include <vector>
5#include <chrono>
6#include <ostream>
7#include <string>
8#include "field.h"
9#ifdef WEBCFACE_MESON
10#include "webcface-config.h"
11#else
12#include "webcface/common/webcface-config.h"
13#endif
14
16namespace message {
17struct LogLine;
18}
19
29enum class LogLevel : int {
30 trace = 0,
31 debug = 1,
32 info = 2,
33 warn = 3,
34 warning = 3,
35 error = 4,
36 critical = 5,
37};
39
43inline std::ostream &operator<<(std::ostream &os, LogLevel level) {
44 switch (level) {
45 case LogLevel::trace:
46 return os << "trace";
47 case LogLevel::debug:
48 return os << "debug";
49 case LogLevel::info:
50 return os << "info";
51 case LogLevel::warn:
52 return os << "warn";
53 case LogLevel::error:
54 return os << "error";
55 case LogLevel::critical:
56 return os << "critical";
57 default:
58 return os << std::to_string(static_cast<int>(level));
59 }
60}
61
63 int level_ = 0;
64 std::chrono::system_clock::time_point time_;
66
67 LogLineData() = default;
68 LogLineData(int level, std::chrono::system_clock::time_point time,
69 const SharedString &message);
70
72 message::LogLine toMessage() const;
73};
74
75class LogLine : private LogLineData {
76 public:
77 LogLine(const LogLineData &ll) : LogLineData(ll) {}
78 LogLevel level() const { return static_cast<LogLevel>(level_); }
79 std::chrono::system_clock::time_point time() const { return time_; }
84 StringView message() const { return message_.decodeShare(); };
85};
86class LogLineW : private LogLineData {
87 public:
88 LogLineW(const LogLineData &ll) : LogLineData(ll) {}
89 LogLevel level() const { return static_cast<LogLevel>(level_); }
90 std::chrono::system_clock::time_point time() const { return time_; }
95 WStringView message() const { return message_.decodeShareW(); };
96};
97
105class WEBCFACE_DLL Log : protected Field {
106 public:
107 Log() = default;
108 Log(const Field &base);
112 Log(const Field &base, const SharedString &field)
113 : Log(Field{base, field}) {}
114
115 using Field::member;
116
126 static void WEBCFACE_CALL keepLines(int n);
127
134 const Log &
135 onChange(std::function<void WEBCFACE_CALL_FP(Log)> callback) const;
142 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
143 std::nullptr_t> = nullptr>
144 const Log &onChange(F callback) const {
145 return onChange(
146 [callback = std::move(callback)](const auto &) { callback(); });
147 }
155 template <typename T>
156 [[deprecated]]
157 void appendListener(T &&callback) const {
158 onChange(std::forward<T>(callback));
159 }
160
166 const Log &request() const;
171 std::optional<std::vector<LogLine>> tryGet() const;
176 std::optional<std::vector<LogLineW>> tryGetW() const;
181 std::vector<LogLine> get() const {
182 return tryGet().value_or(std::vector<LogLine>{});
183 }
188 std::vector<LogLineW> getW() const {
189 return tryGetW().value_or(std::vector<LogLineW>{});
190 }
191
200 bool exists() const;
207 const Log &clear() const;
208
209 private:
210 const Log &append(LogLineData &&ll) const;
211
212 public:
222 const Log &append(LogLevel level, StringInitializer message) const {
223 return append({static_cast<int>(level),
224 std::chrono::system_clock::now(),
225 static_cast<SharedString &>(message)});
226 }
227 const Log &append(int level, StringInitializer message) const {
228 return append({level, std::chrono::system_clock::now(),
229 static_cast<SharedString &>(message)});
230 }
241 std::chrono::system_clock::time_point time,
242 StringInitializer message) const {
243 return append({static_cast<int>(level), time,
244 static_cast<SharedString &>(message)});
245 }
246 const Log &append(int level, std::chrono::system_clock::time_point time,
247 StringInitializer message) const {
248 return append({level, time, static_cast<SharedString &>(message)});
249 }
250
255 template <typename T, typename std::enable_if_t<std::is_same_v<T, Log>,
256 std::nullptr_t> = nullptr>
257 bool operator==(const T &other) const {
258 return static_cast<Field>(*this) == static_cast<Field>(other);
259 }
260 template <typename T, typename std::enable_if_t<std::is_same_v<T, Log>,
261 std::nullptr_t> = nullptr>
262 bool operator!=(const T &other) const {
263 return static_cast<Field>(*this) != static_cast<Field>(other);
264 }
265};
Definition log.h:86
LogLevel level() const
Definition log.h:89
LogLineW(const LogLineData &ll)
Definition log.h:88
std::chrono::system_clock::time_point time() const
Definition log.h:90
WStringView message() const
Definition log.h:95
Definition log.h:75
LogLevel level() const
Definition log.h:78
std::chrono::system_clock::time_point time() const
Definition log.h:79
LogLine(const LogLineData &ll)
Definition log.h:77
StringView message() const
Definition log.h:84
ログの送受信データを表すクラス
Definition log.h:105
const Log & append(LogLevel level, StringInitializer message) const
ログを1行追加
Definition log.h:222
Log(const Field &base, const SharedString &field)
Definition log.h:112
bool operator==(const T &other) const
Logの参照先を比較
Definition log.h:257
const Log & append(int level, StringInitializer message) const
Definition log.h:227
const Log & append(LogLevel level, std::chrono::system_clock::time_point time, StringInitializer message) const
ログを1行追加
Definition log.h:240
const Log & append(int level, std::chrono::system_clock::time_point time, StringInitializer message) const
Definition log.h:246
bool operator!=(const T &other) const
Definition log.h:262
Log()=default
void appendListener(T &&callback) const
Definition log.h:157
std::vector< LogLine > get() const
ログを取得する
Definition log.h:181
std::vector< LogLineW > getW() const
ログを取得する (wstring)
Definition log.h:188
const Log & onChange(F callback) const
値が変化したときに呼び出されるコールバックを設定
Definition log.h:144
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:159
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:215
webcfaceで管理されている文字列を参照するstring_view
Definition encoding.h:60
std::ostream & operator<<(std::ostream &os, const Arg &arg)
Definition func_info.cc:98
LogLevel
ログレベルを表すenum
Definition log.h:29
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:71
Definition log.h:62
std::chrono::system_clock::time_point time_
Definition log.h:64
SharedString message_
Definition log.h:65
Definition log.h:13
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_CALL
Definition webcface-config.h:106
#define WEBCFACE_NS_END
Definition webcface-config.h:113
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:112
#define WEBCFACE_CALL_FP
Definition webcface-config.h:107