WebCFace 3.2.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
106class WEBCFACE_DLL Log : protected Field {
107 public:
108 Log() = default;
109 Log(const Field &base);
113 Log(const Field &base, const SharedString &field)
114 : Log(Field{base, field}) {}
115
116 using Field::lastName;
117 using Field::lastNameW;
118 using Field::member;
119 using Field::name;
120 using Field::nameW;
126 return this->Field::child(static_cast<SharedString &>(field));
127 }
133 return child(std::move(field));
134 }
139 Log parent() const { return this->Field::parent(); }
140
141
151 static void WEBCFACE_CALL keepLines(int n);
152
159 const Log &
160 onChange(std::function<void WEBCFACE_CALL_FP(Log)> callback) const;
167 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
168 std::nullptr_t> = nullptr>
169 const Log &onChange(F callback) const {
170 return onChange(
171 [callback = std::move(callback)](const auto &) { callback(); });
172 }
173
179 const Log &request() const;
184 std::optional<std::vector<LogLine>> tryGet() const;
189 std::optional<std::vector<LogLineW>> tryGetW() const;
194 std::vector<LogLine> get() const {
195 return tryGet().value_or(std::vector<LogLine>{});
196 }
201 std::vector<LogLineW> getW() const {
202 return tryGetW().value_or(std::vector<LogLineW>{});
203 }
204
213 bool exists() const;
220 const Log &clear() const;
221
222 private:
223 const Log &append(LogLineData &&ll) const;
224
225 public:
235 const Log &append(LogLevel level, StringInitializer message) const {
236 return append({static_cast<int>(level),
237 std::chrono::system_clock::now(),
238 static_cast<SharedString &>(message)});
239 }
240 const Log &append(int level, StringInitializer message) const {
241 return append({level, std::chrono::system_clock::now(),
242 static_cast<SharedString &>(message)});
243 }
254 std::chrono::system_clock::time_point time,
255 StringInitializer message) const {
256 return append({static_cast<int>(level), time,
257 static_cast<SharedString &>(message)});
258 }
259 const Log &append(int level, std::chrono::system_clock::time_point time,
260 StringInitializer message) const {
261 return append({level, time, static_cast<SharedString &>(message)});
262 }
263
268 template <typename T, typename std::enable_if_t<std::is_same_v<T, Log>,
269 std::nullptr_t> = nullptr>
270 bool operator==(const T &other) const {
271 return static_cast<Field>(*this) == static_cast<Field>(other);
272 }
273 template <typename T, typename std::enable_if_t<std::is_same_v<T, Log>,
274 std::nullptr_t> = nullptr>
275 bool operator!=(const T &other) const {
276 return static_cast<Field>(*this) != static_cast<Field>(other);
277 }
278};
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:106
const Log & append(LogLevel level, StringInitializer message) const
ログを1行追加
Definition log.h:235
Log operator[](StringInitializer field) const
Definition log.h:132
Log(const Field &base, const SharedString &field)
Definition log.h:113
bool operator==(const T &other) const
Logの参照先を比較
Definition log.h:270
Log parent() const
nameの最後のピリオドの前までを新しい名前とするField
Definition log.h:139
Log child(StringInitializer field) const
「(thisの名前).(追加の名前)」を新しい名前とするField
Definition log.h:125
const Log & append(int level, StringInitializer message) const
Definition log.h:240
const Log & append(LogLevel level, std::chrono::system_clock::time_point time, StringInitializer message) const
ログを1行追加
Definition log.h:253
const Log & append(int level, std::chrono::system_clock::time_point time, StringInitializer message) const
Definition log.h:259
bool operator!=(const T &other) const
Definition log.h:275
Log()=default
std::vector< LogLine > get() const
ログを取得する
Definition log.h:194
std::vector< LogLineW > getW() const
ログを取得する (wstring)
Definition log.h:201
const Log & onChange(F callback) const
値が変化したときに呼び出されるコールバックを設定
Definition log.h:169
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:170
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:235
webcfaceで管理されている文字列を参照するstring_view
Definition encoding.h:71
std::ostream & operator<<(std::ostream &os, const Arg &arg)
Definition func_info.cc:99
LogLevel
ログレベルを表すenum
Definition log.h:29
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:68
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