| 145 | } |
| 146 | |
| 147 | void LogManager::PatternAndSink(const LogEvent& event, skr::StringView formatted_message) SKR_NOEXCEPT |
| 148 | { |
| 149 | static thread_local skr::FlatHashSet<skr_guid_t, skr::guid::hash> patterns_set_; |
| 150 | patterns_set_.clear(); |
| 151 | { |
| 152 | SkrZoneScopedN("PatternAll"); |
| 153 | for (auto&& [id, sink] : sinks_) |
| 154 | { |
| 155 | auto pattern_id = sink->get_pattern(); |
| 156 | auto&& iter = patterns_set_.find(pattern_id); |
| 157 | if (iter != patterns_set_.end()) |
| 158 | continue; |
| 159 | |
| 160 | if (auto p = LogManager::QueryPattern(pattern_id)) |
| 161 | { |
| 162 | SkrZoneScopedN("LogPattern::Pattern"); |
| 163 | |
| 164 | [[maybe_unused]] |
| 165 | auto& _ = p->pattern(event, formatted_message); |
| 166 | patterns_set_.insert(pattern_id); |
| 167 | } |
| 168 | else |
| 169 | { |
| 170 | SKR_UNREACHABLE_CODE(); |
| 171 | } |
| 172 | } |
| 173 | } |
| 174 | |
| 175 | { |
| 176 | SkrZoneScopedN("SinkAll"); |
| 177 | for (auto&& [id, sink] : sinks_) |
| 178 | { |
| 179 | auto pattern_id = sink->get_pattern(); |
| 180 | |
| 181 | if (auto p = LogManager::QueryPattern(pattern_id)) |
| 182 | { |
| 183 | SkrZoneScopedN("LogSink::Sink"); |
| 184 | |
| 185 | sink->sink(event, p->last_result().view()); |
| 186 | } |
| 187 | else |
| 188 | { |
| 189 | SKR_UNREACHABLE_CODE(); |
| 190 | } |
| 191 | } |
| 192 | } |
| 193 | const bool bInplaceLog = !LogManager::Get() || !LogManager::Get()->TryGetWorker(); |
| 194 | const bool bFlushImmediate = LogConstants::gFlushBehavior == LogFlushBehavior::kFlushImmediate; |
| 195 | if (bInplaceLog || bFlushImmediate) |
| 196 | { |
| 197 | FlushAllSinks(); |
| 198 | } |
| 199 | } |
| 200 | |
| 201 | void LogManager::FlushAllSinks() SKR_NOEXCEPT |
| 202 | { |