spdlog
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 {
20namespace details {
21
22// padding information.
24{
25 enum class pad_side
26 {
27 left,
28 right,
29 center
30 };
31
32 padding_info() = default;
33 padding_info(size_t width, padding_info::pad_side side, bool truncate)
34 : width_(width)
35 , side_(side)
36 , truncate_(truncate)
37 , enabled_(true)
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{
52public:
53 explicit flag_formatter(padding_info padinfo)
54 : padinfo_(padinfo)
55 {}
56 flag_formatter() = default;
57 virtual ~flag_formatter() = default;
58 virtual void format(const details::log_msg &msg, const std::tm &tm_time, memory_buf_t &dest) = 0;
59
60protected:
62};
63
64} // namespace details
65
67{
68public:
70
72 {
73 flag_formatter::padinfo_ = padding;
74 }
75};
76
78{
79public:
81
82 explicit pattern_formatter(std::string pattern, pattern_time_type time_type = pattern_time_type::local,
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
102private:
110
111 std::tm get_time_(const details::log_msg &msg);
112 template<typename Padder>
113 void handle_flag_(char flag, details::padding_info padding);
114
115 // Extract given pad spec (e.g. %8X)
116 // Advance the given it pass the end of the padding spec found (if any)
117 // Return padding.
118 static details::padding_info handle_padspec_(std::string::const_iterator &it, std::string::const_iterator end);
119
120 void compile_pattern_(const std::string &pattern);
121};
122} // namespace spdlog
123
124#ifdef SPDLOG_HEADER_ONLY
125# include "pattern_formatter-inl.h"
126#endif
void set_padding_info(details::padding_info padding)
virtual std::unique_ptr< custom_flag_formatter > clone() const =0
virtual ~flag_formatter()=default
flag_formatter(padding_info padinfo)
virtual void format(const details::log_msg &msg, const std::tm &tm_time, memory_buf_t &dest)=0
pattern_formatter & add_flag(char flag, Args &&...args)
pattern_formatter(const pattern_formatter &other)=delete
pattern_time_type pattern_time_type_
std::vector< std::unique_ptr< details::flag_formatter > > formatters_
std::chrono::seconds last_log_secs_
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:583
#define SPDLOG_API
Definition common.h:31
T
Definition core.h:320
T make_shared(T... args)
static SPDLOG_CONSTEXPR const char * default_eol
Definition details/os.h:32
Definition async.h:25
pattern_time_type
Definition common.h:218
SPDLOG_INLINE void set_pattern(std::string pattern, pattern_time_type time_type)
Definition spdlog-inl.h:30
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:116
padding_info(size_t width, padding_info::pad_side side, bool truncate)