Photon 1.0.0
Loading...
Searching...
No Matches
ansicolor_sink-inl.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#ifndef SPDLOG_HEADER_ONLY
8#endif
9
11#include <spdlog/details/os.h>
12
13namespace spdlog
14{
15 namespace sinks
16 {
17
18 template <typename ConsoleMutex>
32
33 template <typename ConsoleMutex>
35 {
36 std::lock_guard<mutex_t> lock(mutex_);
37 colors_[static_cast<size_t>(color_level)] = to_string_(color);
38 }
39
40 template <typename ConsoleMutex>
42 {
43 // Wrap the originally formatted message in color codes.
44 // If color is not supported in the terminal, log as is instead.
45 std::lock_guard<mutex_t> lock(mutex_);
46 msg.color_range_start = 0;
47 msg.color_range_end = 0;
48 memory_buf_t formatted;
49 formatter_->format(msg, formatted);
50 if (should_do_colors_ && msg.color_range_end > msg.color_range_start)
51 {
52 // before color range
53 print_range_(formatted, 0, msg.color_range_start);
54 // in color range
55 print_ccode_(colors_[static_cast<size_t>(msg.level)]);
56 print_range_(formatted, msg.color_range_start, msg.color_range_end);
57 print_ccode_(reset);
58 // after color range
59 print_range_(formatted, msg.color_range_end, formatted.size());
60 }
61 else // no color
62 {
63 print_range_(formatted, 0, formatted.size());
64 }
65 fflush(target_file_);
66 }
67
68 template <typename ConsoleMutex>
70 {
71 std::lock_guard<mutex_t> lock(mutex_);
72 fflush(target_file_);
73 }
74
75 template <typename ConsoleMutex>
77 {
78 std::lock_guard<mutex_t> lock(mutex_);
79 formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern));
80 }
81
82 template <typename ConsoleMutex>
83 SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter)
84 {
85 std::lock_guard<mutex_t> lock(mutex_);
86 formatter_ = std::move(sink_formatter);
87 }
88
89 template <typename ConsoleMutex>
91 {
92 return should_do_colors_;
93 }
94
95 template <typename ConsoleMutex>
97 {
98 switch (mode)
99 {
101 should_do_colors_ = true;
102 return;
104 should_do_colors_ = details::os::in_terminal(target_file_) && details::os::is_color_terminal();
105 return;
107 should_do_colors_ = false;
108 return;
109 default:
110 should_do_colors_ = false;
111 }
112 }
113
114 template <typename ConsoleMutex>
116 {
117 fwrite(color_code.data(), sizeof(char), color_code.size(), target_file_);
118 }
119
120 template <typename ConsoleMutex>
121 SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::print_range_(const memory_buf_t& formatted, size_t start, size_t end)
122 {
123 fwrite(formatted.data() + start, sizeof(char), end - start, target_file_);
124 }
125
126 template <typename ConsoleMutex>
128 {
129 return std::string(sv.data(), sv.size());
130 }
131
132 // ansicolor_stdout_sink
133 template <typename ConsoleMutex>
138
139 // ansicolor_stderr_sink
140 template <typename ConsoleMutex>
145
146 } // namespace sinks
147} // namespace spdlog
Definition pattern_formatter.h:79
Definition ansicolor_sink.h:28
const string_view_t green
Definition ansicolor_sink.h:62
void set_pattern(const std::string &pattern) final
Definition ansicolor_sink-inl.h:76
static std::string to_string_(const string_view_t &sv)
Definition ansicolor_sink-inl.h:127
const string_view_t red_bold
Definition ansicolor_sink.h:81
void set_color(level::level_enum color_level, string_view_t color)
Definition ansicolor_sink-inl.h:34
const string_view_t bold_on_red
Definition ansicolor_sink.h:82
void set_formatter(std::unique_ptr< spdlog::formatter > sink_formatter) override
Definition ansicolor_sink-inl.h:83
bool should_color()
Definition ansicolor_sink-inl.h:90
std::array< std::string, level::n_levels > colors_
Definition ansicolor_sink.h:89
const string_view_t cyan
Definition ansicolor_sink.h:66
void set_color_mode(color_mode mode)
Definition ansicolor_sink-inl.h:96
const string_view_t white
Definition ansicolor_sink.h:67
const string_view_t yellow_bold
Bold colors.
Definition ansicolor_sink.h:80
ansicolor_sink(FILE *target_file, color_mode mode)
Definition ansicolor_sink-inl.h:19
void flush() override
Definition ansicolor_sink-inl.h:69
const string_view_t reset
Definition ansicolor_sink.h:50
void log(const details::log_msg &msg) override
Definition ansicolor_sink-inl.h:41
void print_ccode_(const string_view_t &color_code)
Definition ansicolor_sink-inl.h:115
void print_range_(const memory_buf_t &formatted, size_t start, size_t end)
Definition ansicolor_sink-inl.h:121
ansicolor_stderr_sink(color_mode mode=color_mode::automatic)
Definition ansicolor_sink-inl.h:141
ansicolor_stdout_sink(color_mode mode=color_mode::automatic)
Definition ansicolor_sink-inl.h:134
#define SPDLOG_INLINE
Definition common.h:47
SPDLOG_INLINE bool is_color_terminal() SPDLOG_NOEXCEPT
Definition os-inl.h:417
SPDLOG_INLINE bool in_terminal(FILE *file) SPDLOG_NOEXCEPT
Definition os-inl.h:448
level_enum
Definition common.h:233
@ critical
Definition common.h:239
@ err
Definition common.h:238
@ warn
Definition common.h:237
@ info
Definition common.h:236
@ off
Definition common.h:240
@ trace
Definition common.h:234
@ debug
Definition common.h:235
Definition async.h:26
fmt::basic_string_view< char > string_view_t
Definition common.h:172
color_mode
Definition common.h:278
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:173
Definition Bitmap.h:10
Definition log_msg.h:14
size_t color_range_end
Definition log_msg.h:29
level::level_enum level
Definition log_msg.h:23
size_t color_range_start
Definition log_msg.h:28
annotation details
Definition tag_strings.h:125