File tree Expand file tree Collapse file tree 2 files changed +81
-0
lines changed Expand file tree Collapse file tree 2 files changed +81
-0
lines changed Original file line number Diff line number Diff line change
1
+ """
2
+ Demonstrate how to use a single logger to emit log records to
3
+ both console and MQTT broker, in this case Adafruit IO.
4
+ """
5
+
6
+ import json
7
+ import socket
8
+ import ssl
9
+
10
+ import adafruit_logging as logging
11
+ import adafruit_minimqtt .adafruit_minimqtt as MQTT
12
+
13
+ from mqtt_handler import MQTTHandler
14
+
15
+ logger = logging .getLogger (__name__ )
16
+
17
+ broker = "io.adafruit.com"
18
+ port = 8883
19
+ username = "Adafruit_IO_username"
20
+ password = "Adafruit_IO_key"
21
+ feedname = "Adafruit_feed_name"
22
+ mqtt_topic = f"{ username } /feeds/{ feedname } "
23
+ mqtt_client = MQTT .MQTT (
24
+ broker = broker ,
25
+ port = port ,
26
+ username = username ,
27
+ password = password ,
28
+ socket_pool = socket ,
29
+ ssl_context = ssl .create_default_context (),
30
+ )
31
+ mqtt_client .connect ()
32
+ mqtt_handler = MQTTHandler (mqtt_client , mqtt_topic )
33
+ print ("adding MQTT handler" )
34
+ logger .addHandler (mqtt_handler )
35
+
36
+ stream_handler = logging .StreamHandler ()
37
+ print ("adding Stream handler" )
38
+ logger .addHandler (stream_handler )
39
+
40
+ data = "foo bar"
41
+ print ("logging begins !" )
42
+ # This should emit both to the console as well as to the MQTT broker.
43
+ logger .warning (json .dumps (data ))
Original file line number Diff line number Diff line change
1
+ """
2
+ MQTT logging handler - log records will be published as MQTT messages
3
+ """
4
+
5
+ import adafruit_minimqtt .adafruit_minimqtt as MQTT
6
+ # adafruit_logging defines log levels dynamically.
7
+ # pylint: disable=no-name-in-module
8
+ from adafruit_logging import NOTSET , Handler , LogRecord
9
+
10
+
11
+ class MQTTHandler (Handler ):
12
+ """
13
+ Log handler that emits log records as MQTT PUBLISH messages.
14
+ """
15
+ def __init__ (self , mqtt_client : MQTT .MQTT , topic : str ) -> None :
16
+ """
17
+ Assumes that the MQTT client object is already connected.
18
+ """
19
+ super ().__init__ ()
20
+
21
+ self ._mqtt_client = mqtt_client
22
+ self ._topic = topic
23
+
24
+ # To make it work also in CPython.
25
+ self .level = NOTSET
26
+
27
+ def emit (self , record : LogRecord ) -> None :
28
+ """
29
+ Publish message from the LogRecord to the MQTT broker.
30
+ """
31
+ self ._mqtt_client .publish (self ._topic , record .msg )
32
+
33
+ # To make this work also in CPython's logging.
34
+ def handle (self , record : LogRecord ) -> None :
35
+ """
36
+ Handle the log record. Here, it means just emit.
37
+ """
38
+ self .emit (record )
You can’t perform that action at this time.
0 commit comments