Open
Description
Description
Documentation of Kafka Client Configuration mentions keyword-only argument logger
in constructors of Consumer and Producer.
This argument is not listed in documentation of Consumer and Producer.
In addition, the paragraph on the screenshot contains incorrect type for logger
. The documentation states type logging.Handler
, but in the provided example instance of class logging.Logger
is passed; logging.Logger
is not a subclass of logging.Handler
.
As per my tests, any object with method log
is accepted; this method must accept level, msg and arbitrarily many arguments.
Test code below.
confluent_kafka.version()
-- ('2.2.0', 33685504)
.
confluent_kafka.libversion()
-- ('2.2.0', 33685759)
.
import logging
import sys
from logging import LoggerAdapter, StreamHandler, getLogger
from time import sleep
from typing import Any
from confluent_kafka import Consumer
def _print(*args):
print(*args, file=sys.stderr, flush=True)
class L:
@staticmethod
def log(*args, **kwargs):
_print(args)
_print(kwargs)
class StrictL:
@staticmethod
def log(level: int, msg: str, /, *args: Any):
_print(f'{level}:\t{msg % args}')
def main():
config = {
'bootstrap.servers': 'localhost:9092',
'security.protocol': 'plaintext',
'sasl.mechanism': 'PLAIN',
'client.id': 'test',
'group.id': 'test',
}
_print('Test Logger')
c = Consumer(config, logger=getLogger())
c.poll(5)
c.close()
_print('\nTest LoggerAdapter')
c = Consumer(config, logger=LoggerAdapter(getLogger(), {'spider': None}))
c.poll(5)
c.close()
_print('\nTest logging')
c = Consumer(config, logger=logging)
c.poll(5)
c.close()
_print('\nTest L')
c = Consumer(config, logger=L)
c.poll(5)
c.close()
_print('\nTest StrictL')
c = Consumer(config, logger=StrictL)
c.poll(5)
c.close()
_print('\nTest StreamHandler')
try:
c = Consumer(config, logger=StreamHandler())
c.poll(5)
except AttributeError as e:
_print(e.__class__.__name__, e)
finally:
c.close()
if __name__ == '__main__':
main()