xref: /aosp_15_r20/external/abseil-cpp/absl/log/internal/log_sink_set.h (revision 9356374a3709195abf420251b3e825997ff56c0f)
1 // Copyright 2022 The Abseil Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 // -----------------------------------------------------------------------------
16 // File: log/internal/log_sink_set.h
17 // -----------------------------------------------------------------------------
18 
19 #ifndef ABSL_LOG_INTERNAL_LOG_SINK_SET_H_
20 #define ABSL_LOG_INTERNAL_LOG_SINK_SET_H_
21 
22 #include "absl/base/config.h"
23 #include "absl/log/log_entry.h"
24 #include "absl/log/log_sink.h"
25 #include "absl/types/span.h"
26 
27 namespace absl {
28 ABSL_NAMESPACE_BEGIN
29 namespace log_internal {
30 
31 // Returns true if a globally-registered `LogSink`'s `Send()` is currently
32 // being invoked on this thread.
33 bool ThreadIsLoggingToLogSink();
34 
35 // This function may log to two sets of sinks:
36 //
37 // * If `extra_sinks_only` is true, it will dispatch only to `extra_sinks`.
38 //   `LogMessage::ToSinkAlso` and `LogMessage::ToSinkOnly` are used to attach
39 //    extra sinks to the entry.
40 // * Otherwise it will also log to the global sinks set. This set is managed
41 //   by `absl::AddLogSink` and `absl::RemoveLogSink`.
42 void LogToSinks(const absl::LogEntry& entry,
43                 absl::Span<absl::LogSink*> extra_sinks, bool extra_sinks_only);
44 
45 // Implementation for operations with log sink set.
46 void AddLogSink(absl::LogSink* sink);
47 void RemoveLogSink(absl::LogSink* sink);
48 void FlushLogSinks();
49 
50 }  // namespace log_internal
51 ABSL_NAMESPACE_END
52 }  // namespace absl
53 
54 #endif  // ABSL_LOG_INTERNAL_LOG_SINK_SET_H_
55