Photon 1.0.0
Loading...
Searching...
No Matches
pattern_formatter.h
Go to the documentation of this file.
1// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
2// Distributed under the MIT License (http://opensource.org/licenses/MIT)
3
4#pragma once
5
6#include <spdlog/common.h>
8#include <spdlog/details/os.h>
9#include <spdlog/formatter.h>
10
11#include <chrono>
12#include <ctime>
13#include <memory>
14
15#include <string>
16#include <vector>
17#include <unordered_map>
18
19namespace spdlog
20{
21 namespace details
22 {
23
24 // padding information.
26 {
27 enum class pad_side
28 {
29 left,
30 right,
31 center
32 };
33
34 padding_info() = default;
35 padding_info(size_t width, padding_info::pad_side side, bool truncate)
36 : width_(width), side_(side), truncate_(truncate), enabled_(true)
37 {
38 }
39
40 bool enabled() const
41 {
42 return enabled_;
43 }
44 size_t width_ = 0;
46 bool truncate_ = false;
47 bool enabled_ = false;
48 };
49
51 {
52 public:
53 explicit flag_formatter(padding_info padinfo)
54 : padinfo_(padinfo)
55 {
56 }
57 flag_formatter() = default;
58 virtual ~flag_formatter() = default;
59 virtual void format(const details::log_msg& msg, const std::tm& tm_time, memory_buf_t& dest) = 0;
60
61 protected:
63 };
64
65 } // namespace details
66
68 {
69 public:
70 virtual std::unique_ptr<custom_flag_formatter> clone() const = 0;
71
73 {
74 flag_formatter::padinfo_ = padding;
75 }
76 };
77
79 {
80 public:
81 using custom_flags = std::unordered_map<char, std::unique_ptr<custom_flag_formatter>>;
82
83 explicit pattern_formatter(std::string pattern, pattern_time_type time_type = pattern_time_type::local, std::string eol = spdlog::details::os::default_eol, custom_flags custom_user_flags = custom_flags());
84
85 // use default pattern is not given
86 explicit pattern_formatter(pattern_time_type time_type = pattern_time_type::local, std::string eol = spdlog::details::os::default_eol);
87
88 pattern_formatter(const pattern_formatter& other) = delete;
90
91 std::unique_ptr<formatter> clone() const override;
92 void format(const details::log_msg& msg, memory_buf_t& dest) override;
93
94 template <typename T, typename... Args>
95 pattern_formatter& add_flag(char flag, Args&&... args)
96 {
97 custom_handlers_[flag] = details::make_unique<T>(std::forward<Args>(args)...);
98 return *this;
99 }
100 void set_pattern(std::string pattern);
101 void need_localtime(bool need = true);
102
103 private:
104 std::string pattern_;
105 std::string eol_;
108 std::tm cached_tm_;
109 std::chrono::seconds last_log_secs_;
110 std::vector<std::unique_ptr<details::flag_formatter>> formatters_;
112
113 std::tm get_time_(const details::log_msg& msg);
114 template <typename Padder>
115 void handle_flag_(char flag, details::padding_info padding);
116
117 // Extract given pad spec (e.g. %8X)
118 // Advance the given it pass the end of the padding spec found (if any)
119 // Return padding.
120 static details::padding_info handle_padspec_(std::string::const_iterator& it, std::string::const_iterator end);
121
122 void compile_pattern_(const std::string& pattern);
123 };
124} // namespace spdlog
125
126#ifdef SPDLOG_HEADER_ONLY
128#endif
Definition pattern_formatter.h:68
void set_padding_info(const details::padding_info &padding)
Definition pattern_formatter.h:72
virtual std::unique_ptr< custom_flag_formatter > clone() const =0
Definition pattern_formatter.h:51
virtual ~flag_formatter()=default
flag_formatter(padding_info padinfo)
Definition pattern_formatter.h:53
padding_info padinfo_
Definition pattern_formatter.h:62
virtual void format(const details::log_msg &msg, const std::tm &tm_time, memory_buf_t &dest)=0
Definition formatter.h:13
Definition pattern_formatter.h:79
custom_flags custom_handlers_
Definition pattern_formatter.h:111
std::string eol_
Definition pattern_formatter.h:105
pattern_formatter(const pattern_formatter &other)=delete
pattern_time_type pattern_time_type_
Definition pattern_formatter.h:106
std::vector< std::unique_ptr< details::flag_formatter > > formatters_
Definition pattern_formatter.h:110
bool need_localtime_
Definition pattern_formatter.h:107
std::chrono::seconds last_log_secs_
Definition pattern_formatter.h:109
pattern_formatter & add_flag(char flag, Args &&... args)
Definition pattern_formatter.h:95
std::tm cached_tm_
Definition pattern_formatter.h:108
std::string pattern_
Definition pattern_formatter.h:104
std::unordered_map< char, std::unique_ptr< custom_flag_formatter > > custom_flags
Definition pattern_formatter.h:81
pattern_formatter & operator=(const pattern_formatter &other)=delete
void handle_flag_(char flag, details::padding_info padding)
std::basic_string< Char > format(const text_style &ts, const S &format_str, const Args &... args)
Definition color.h:646
#define SPDLOG_API
Definition common.h:45
Definition async.h:26
pattern_time_type
Definition common.h:289
SPDLOG_INLINE void set_pattern(std::string pattern, pattern_time_type time_type)
Definition spdlog-inl.h:31
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:173
Definition log_msg.h:14
Definition pattern_formatter.h:26
bool enabled() const
Definition pattern_formatter.h:40
bool enabled_
Definition pattern_formatter.h:47
pad_side
Definition pattern_formatter.h:28
pad_side side_
Definition pattern_formatter.h:45
padding_info(size_t width, padding_info::pad_side side, bool truncate)
Definition pattern_formatter.h:35
bool truncate_
Definition pattern_formatter.h:46
size_t width_
Definition pattern_formatter.h:44
annotation details
Definition tag_strings.h:125