DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
ERSKafkaLogHandler.ERSKafkaLogHandler Class Reference
Inheritance diagram for ERSKafkaLogHandler.ERSKafkaLogHandler:
[legend]
Collaboration diagram for ERSKafkaLogHandler.ERSKafkaLogHandler:
[legend]

Public Member Functions

 __init__ (self, str session="Unknown", str kafka_address="monkafka.cern.ch:30092", str kafka_topic="ers_stream")
 
None emit (self, logging.LogRecord record)
 

Public Attributes

str session = session
 
str kafka_address = kafka_address
 
str kafka_topic = kafka_topic
 
 publisher
 

Static Protected Member Functions

SeverityLevel _convert_logging_level_to_ers_level (int level)
 

Detailed Description

A logging handler that sends log messages to the ERS system via Kafka.

Note 1: You need to have Kafka to use this correctly, to see the message in Grafana, you will need to have the full ERS stack running.
Note 2: IMPORTANT!! you MUST NOT use this handler on the root logger. Use it on a logger that you have created yourself (this is because the root logger is used by Kafka, and it creates a circular dependency).

Example:
```python
import logging
from erskafka.ERSKafkaLogHandler import ERSKafkaLogHandler

logger = logging.getLogger("my_logger") # NOTE, THIS IS NOT THE ROOT LOGGER!!!
# logger = logging.getLogger() # FORBIDDEN!!! Will should raise an exception
logger.setLevel(logging.DEBUG)
handler = ERSKafkaLogHandler(session="test")
logger.addHandler(handler)
logger.debug("This is a debug message")
```

Definition at line 9 of file ERSKafkaLogHandler.py.

Constructor & Destructor Documentation

◆ __init__()

ERSKafkaLogHandler.ERSKafkaLogHandler.__init__ ( self,
str session = "Unknown",
str kafka_address = "monkafka.cern.ch:30092",
str kafka_topic = "ers_stream" )

Definition at line 29 of file ERSKafkaLogHandler.py.

34 ):
35 super().__init__()
36 os.environ['DUNEDAQ_PARTITION'] = session
37 self.session:str = session
38 self.kafka_address:str = kafka_address
39 self.kafka_topic:str = kafka_topic
40
41 self.publisher = ERSPublisher(
42 bootstrap = kafka_address,
43 topic = kafka_topic,
44 )
45

Member Function Documentation

◆ _convert_logging_level_to_ers_level()

SeverityLevel ERSKafkaLogHandler.ERSKafkaLogHandler._convert_logging_level_to_ers_level ( int level)
staticprotected

Definition at line 47 of file ERSKafkaLogHandler.py.

47 def _convert_logging_level_to_ers_level(level:int) -> SeverityLevel:
48 match level:
49 case logging.DEBUG:
50 return SeverityLevel.DEBUG
51 case logging.INFO:
52 return SeverityLevel.INFO
53 case logging.WARNING:
54 return SeverityLevel.WARNING
55 case logging.ERROR:
56 return SeverityLevel.ERROR
57 case logging.CRITICAL:
58 return SeverityLevel.FATAL
59 case _:
60 return SeverityLevel.INFO
61

◆ emit()

None ERSKafkaLogHandler.ERSKafkaLogHandler.emit ( self,
logging.LogRecord record )

Definition at line 62 of file ERSKafkaLogHandler.py.

62 def emit(self, record:logging.LogRecord) -> None:
63 ers_level = ERSKafkaLogHandler._convert_logging_level_to_ers_level(record.levelno)
64
65 if record.name == 'root':
66 raise ERSKafkaLogHandlerOnRootLogger('To avoid all sorts of undesired behaviours this logger cannot be use on the root logger. Use logging.getLogger("some_name").addHandler(ERSKafkaLogHandler()) instead.')
67
68 success = self.publisher.publish(
69 record.msg,
70 severity = ers_level.name,
71 context_kwargs = dict(
72 package_name = str(record.module),
73 application_name = str(record.name),
74 line_number = record.lineno,
75 file_name = str(record.pathname),
76 function_name = str(record.funcName),
77 )
78 )
79 if not success:
80 print(f'WARNING! Failed to publish: {record.msg} to Kafka')

Member Data Documentation

◆ kafka_address

str ERSKafkaLogHandler.ERSKafkaLogHandler.kafka_address = kafka_address

Definition at line 38 of file ERSKafkaLogHandler.py.

◆ kafka_topic

str ERSKafkaLogHandler.ERSKafkaLogHandler.kafka_topic = kafka_topic

Definition at line 39 of file ERSKafkaLogHandler.py.

◆ publisher

ERSKafkaLogHandler.ERSKafkaLogHandler.publisher
Initial value:
= ERSPublisher(
bootstrap = kafka_address,
topic = kafka_topic,
)

Definition at line 41 of file ERSKafkaLogHandler.py.

◆ session

str ERSKafkaLogHandler.ERSKafkaLogHandler.session = session

Definition at line 37 of file ERSKafkaLogHandler.py.


The documentation for this class was generated from the following file: