Kafka 自定义日志处理程序使 Django 应用程序在端口

问题描述

我有一个 django 应用程序,我需要将我的日志发送到 kafka 服务器。所以我实现了一个自定义处理程序,如下所示:

import logging
from kafka import KafkaProducer

class KafkaHandler(logging.Handler):
    def __init__(self,hosts=['DEFAULT_KAFKA_HOST:DEFAULT_KAFKA_PORT'],topic='DEFAULT_KAFKA_TOPIC'):
        logging.Handler.__init__(self)
        self.producer = KafkaProducer(
            bootstrap_servers=hosts,security_protocol='SASL_SSL',sasl_mechanism='SCRAM-SHA-512',sasl_plain_username='KAFKA_USER',sasl_plain_password='KAFKA_PASSWORD',value_serializer=lambda v: json.dumps(v).encode('utf-8'),linger_ms=10)
        self.topic = topic

这里的问题是,当我在本地应用程序中通过 python manage.py runserver 运行 django 应用程序时,运行没有任何问题,但我的本地主机不侦听特定端口。 netstat -tulpn输出

(并非所有进程都可以识别,非拥有进程信息 不会显示,你必须是 root 才能看到这一切。) 活动 Internet 连接(仅限服务器) Proto Recv-Q Send-Q 本地地址外地址状态PID/程序名称
tcp 0 0 127.0.0.53:53 0.0.0.0:* 听-
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 ::1:631 :::* 聆听 -
UDP 0 0 127.0.0.53:53 0.0.0.0:* -
UDP 0 0 0.0.0.0:631 0.0.0.0:* -
UDP 0 0 0.0.0.0:5353 0.0.0.0:* -
UDP 0 0 0.0.0.0:54922 0.0.0.0:* -
udp6 0 0 :::58148 :::* -
udp6 0 0 :::5353 :::* -

但是在我注释掉生产者初始化之后,一切都按预期工作,django 应用程序开始监听。 netstat -tulpn

(并非所有进程都可以识别,非拥有进程信息 不会显示,你必须是 root 才能看到这一切。) 活动 Internet 连接(仅限服务器) Proto Recv-Q Send-Q 本地地址外地址状态PID/程序名称
tcp 0 0 127.0.0.53:53 0.0.0.0:* 听-
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:8000 0.0.0.0:* 听 11477/python
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 ::1:631 :::* 聆听 -
UDP 0 0 127.0.0.53:53 0.0.0.0:* -
UDP 0 0 0.0.0.0:631 0.0.0.0:* -
UDP 0 0 0.0.0.0:5353 0.0.0.0:* -
UDP 0 0 0.0.0.0:54922 0.0.0.0:* -
udp6 0 0 :::58148 :::* -
udp6 0 0 :::5353 :::* -

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)