spa: add topic-based logging

Add a struct spa_log_topic that allows for logical grouping of messages.
The new macros spa_log_logt() and spa_log_logtv() take a topic as
argument, the topic's level acts as filter.
A new macro spa_log_topic_init() initializes a topic. By default a topic
inherits its logger's debug level but a logger implementation may set
that topic to a specific fixed log level.

The various spa_log_*() macros transparently wrap new and old
implementations:
- if the implementation is version 0, the new logt() calls drop the
  topic and get routed into the old log() calls
- if the implementation is version 1, the old log() calls use a NULL
  topic and get routed into the new logt() calls

All spa_log_* macros use the SPA_LOG_DEFAULT_TOPIC topic (NULL), it is
up to the caller to redefine that. Alternatively, use spa_logt_* to pass
an explicit topic.

There is one crucial flaw in this implementation: log topics are
initialized to their target level by the current logger. Where a topic
is initialized but the logger is switched later, the topic is not
automatically re-initialized. Ultimately this shouldn't matter for
real-world use-cases.
This commit is contained in:
Peter Hutterer 2021-09-09 14:32:43 +10:00 committed by Wim Taymans
parent 26cfdc95cc
commit 0e60e9c063
4 changed files with 387 additions and 12 deletions

View file

@ -96,6 +96,7 @@ test('test spa',
'test-spa-buffer.c',
'test-spa-json.c',
'test-spa-utils.c',
'test-spa-log.c',
'test-spa-node.c',
'test-spa-pod.c',
include_directories: pwtest_inc,