Skip to content

AMQPLogstashHandler needs heartbeat into pika #6

@vamkaxifa

Description

@vamkaxifa

Hi there, I use python3-logstash in my project to collection information. Without heartbeat,
pseudocode as below:

class LogHandler:
    def __init__(self, app_name):
        self.__appName = app_name
        self.__logger = logging.getLogger(app_name)
        self.__logger.setLevel(LOG_LEVEL)
        self.__logger.addHandler(logstash.AMQPLogstashHandler(host=config.CURRENT_CONFIG['LOG_HOST'],
                                                              port=config.CURRENT_CONFIG['LOG_PORT'],
                                                              username=config.CURRENT_CONFIG['LOG_USERNAME'],
                                                              password=config.CURRENT_CONFIG['LOG_PASSWORD'],
                                                              virtual_host=config.CURRENT_CONFIG['LOG_VIRTUAL_HOST'],
                                                              durable=True,
                                                              exchange=config.CURRENT_CONFIG['LOG_EXCHANGE'],
                                                              version=1))

    def debug(self, msg):
        self.__logger.debug(msg=msg, extra={"appname": self.__appName, "log_type": "BizLog"})

    def info(self, msg):
        self.__logger.info(msg=msg, extra={"appname": self.__appName, "log_type": "BizLog"})

    def error(self, msg):
        self.__logger.error(msg=msg, extra={"appname": self.__appName, "log_type": "ErrorLog"})

    def warning(self, msg):
        self.__logger.warning(msg=msg, extra={"appname": self.__appName, "log_type": "BizLog"})

After my project runs for a while, I get error as below:

--- Logging error ---
Traceback (most recent call last):
  File "/soft/python3.7.2/lib/python3.7/logging/handlers.py", line 631, in emit
    self.send(s)
  File "/soft/python3.7.2/lib/python3.7/logging/handlers.py", line 579, in send
    self.sock.sendall(s)
  File "/soft/python3.7.2/lib/python3.7/site-packages/logstash/handler_amqp.py", line 120, in sendall
    properties=self.spec)
  File "/soft/python3.7.2/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 2120, in basic_publish
    mandatory, immediate)
  File "/soft/python3.7.2/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 2206, in publish
    immediate=immediate)
  File "/soft/python3.7.2/lib/python3.7/site-packages/pika/channel.py", line 415, in basic_publish
    raise exceptions.ChannelClosed()
pika.exceptions.ChannelClosed

This error can be solved by restarting my project. But I'm thinking about is it better that AMQPLogstashHandler add heartbeat to pika?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions