| <!-- go/cmark --> |
| |
| <!--* freshness: {owner: 'tommi' reviewed: '2026-04-15'} *--> |
| |
| # WebRTC Logging Initialization |
| |
| ## Overview |
| |
| This document explains how to initialize the WebRTC logging system, when it must |
| be done, and the consequences of late initialization. |
| |
| ## How to Initialize |
| |
| To initialize logging with custom settings, call `webrtc::InitializeLogging` and |
| pass a `webrtc::LoggingConfig` object. |
| |
| **Initialization can happen only once.** |
| |
| Example: |
| |
| ```cpp |
| #include "rtc_base/logging.h" |
| |
| int main() { |
| webrtc::LoggingConfig config; |
| config.set_min_severity(webrtc::LS_INFO); |
| config.set_log_thread(true); |
| config.set_log_timestamp(true); |
| |
| // Add custom sinks if needed |
| // config.AddSink(std::make_unique<MyLogSink>()); |
| |
| if (!webrtc::InitializeLogging(std::move(config))) { |
| // Handle initialization failure (e.g., called too late) |
| } |
| |
| // Proceed with WebRTC usage |
| } |
| ``` |
| |
| ## When Initialization Must Be Done |
| |
| Initialization **must** be performed before any other WebRTC API calls and |
| before any logging occurs via `RTC_LOG` macros. |
| |
| ## Implicit Initialization |
| |
| If not initialized explicitly, logging initialization will happen **implicitly** |
| upon the first logging call (e.g., `RTC_LOG`) or any function that accesses the |
| logging configuration. The defaults used for implicit initialization are defined |
| in the `LoggingConfig` struct. |
| |
| ## Behavior When It Is Too Late |
| |
| If `InitializeLogging` is called after the logging system has already been |
| initialized (implicitly or explicitly): |
| |
| 1. The function will return `false`. |
| 2. The provided `LoggingConfig` will be ignored. |
| 3. The logging system will continue to operate with the configuration |
| established by the first initialization. |
| |
| To avoid this, ensure `InitializeLogging` is called as early as possible in the |
| application's startup sequence. |