Introduce explicit configuration for logging initialization

Introduce the LoggingConfig struct and InitializeLogging function to
eventually replace legacy static methods for configuring the logging
system. This centralizes logging parameters and sinks, ensuring a more
consistent, less error prone, more efficient (due to not relying on per
log message synchronization) initialization sequence.

The new model requires that configuration is applied only once. If
InitializeLogging is called after the system has already started—either
explicitly or implicitly via a log call—the function returns false and
the provided configuration is ignored. This prevents race conditions and
inconsistent logging states that can occur when modifying global log
settings during runtime, but allows for reduces synchronization at
runtime.

Key modifications:
- Deprecate LogMessage::LogThreads and LogMessage::ConfigureLogging.
- Remove LogPrefix and SetLogPrefix methods, centralizing prefix in
  config.
- Remove streams_empty_ as it is no longer needed.
- Include documentation for the new initialization flow.
- Start transitioning internal logging state management to use the
  unified configuration object instead of individual static flags.

Bug: webrtc:42234107
Change-Id: I1879e9626b7ede5d2a1ebf238c7f26c4f185e6b1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/462063
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#47435}
13 files changed
tree: 8447fbad9ee422f0515a2bc9b3675939a91c51ba
  1. .agents/
  2. agents/
  3. api/
  4. audio/
  5. build_overrides/
  6. call/
  7. common_audio/
  8. common_video/
  9. data/
  10. docs/
  11. examples/
  12. experiments/
  13. g3doc/
  14. infra/
  15. logging/
  16. media/
  17. modules/
  18. net/
  19. p2p/
  20. pc/
  21. resources/
  22. rtc_base/
  23. rtc_tools/
  24. sdk/
  25. stats/
  26. system_wrappers/
  27. test/
  28. tools_webrtc/
  29. video/
  30. .clang-format
  31. .clang-tidy
  32. .git-blame-ignore-revs
  33. .gitignore
  34. .gn
  35. .mailmap
  36. .rustfmt.toml
  37. .style.mdformat
  38. .style.yapf
  39. .vpython3
  40. .yapfignore
  41. AUTHORS
  42. BUILD.gn
  43. CODE_OF_CONDUCT.md
  44. codereview.settings
  45. DEPS
  46. DIR_METADATA
  47. ENG_REVIEW_OWNERS
  48. GEMINI.md
  49. LICENSE
  50. license_template.txt
  51. native-api.md
  52. OWNERS
  53. OWNERS_INFRA
  54. PATENTS
  55. PRESUBMIT.py
  56. presubmit_test.py
  57. presubmit_test_mocks.py
  58. pylintrc
  59. pylintrc_old_style
  60. README.chromium
  61. README.md
  62. unsafe_buffers_paths.txt
  63. WATCHLISTS
  64. webrtc.gni
  65. webrtc_lib_link_test.cc
  66. whitespace.txt
README.md

WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.

Development

See here for instructions on how to get started developing with the native code.

Authoritative list of directories that contain the native API header files.

More info